我可以将 CA 创建的 SSL 证书导入我的 Java 密钥库吗?

我可以将 CA 创建的 SSL 证书导入我的 Java 密钥库吗?

我正在尝试将 CA 签名的证书导入 Java 密钥库。我能找到的所有说明都告诉我首先使用 Java keytool 创建密钥库和签名请求 (CSR),然后让 CA 签名 CSR,然后将签名的证书导入回密钥库。

好吧,愚蠢的我没有阅读详细的手册,让 CA 在线为我创建证书,而不是上传我自己的 CSR。现在我得到了:

  • ca.pemCA 的根证书
  • sub.class1.server.ca.pemCA 的中级证书
  • mydomain.crt由 CA 为我的域名创建的签名证书
  • mydomain.key由 CA 创建的我的证书的私钥文件

我尝试将证书导入到我的密钥库中,如下所示:

keytool -import -trustcacerts -alias root -file ca.pem -keystore mykeystore.jks
keytool -import -trustcacerts -alias intermediate -file sub.class1.server.ca.pem -keystore mykeystore.jks
keytool -import -alias mydomain mydomain.crt -keystore mykeystore.jks

因此密钥库的内容现在如下所示:

intermediate, Jul 16, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 0A:D3:...
root, Jul 16, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 3E:2B:...
mydomain, Jul 16, 2015, trustedCertEntry, 
Certificate fingerprint (SHA1): 18:F2:...
selfsigned, Feb 4, 2015, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 2B:74:...

不幸的是,使用“mydomain”别名时无法访问我尝试保护的服务(JIRA 服务器)。当我使用“selfsigned”别名(这是我之前从密钥库创建的自签名证书)时,如果其他所有设置都相同,则可以正常访问该服务(当然,除了有关自签名证书的警告);因此我认为问题出在 CA 生成的证书上。

我尝试按照此线程中的建议连接 mydomain.crt 和 mydomain.key 文件,但没有成功: 将 PEM 证书链和密钥导入 Java Keystore

我可能做错了什么吗?是否可以将第三方创建的证书导入现有的 Java 密钥库?还是我需要撤销该证书并使用从密钥库中提取的自制 CSR 再次执行该过程?

答案1

我过去使用 PKCS12 密钥库做到了这一点:

cat ca.pem sub.class1.server.ca.pem > chain.pem
openssl pkcs12 -export -inkey mydomain.key -certfile chain.pem \
      -out mydomain.p12 -in mydomain.pem -name mydomain

之后,通过指定密钥库类型为 PKCS12 直接使用它,或者使用 keytool 转换为 JKS:

keytool -importkeystore -srckeystore mydomain.p12 \
      -srcstoretype PKCS12 -deststoretype JKS -destkeystore mydomain.jks

相关内容