两年前,我获得了VeriSign / Symantec SSL证书。启动此请求时,我们在随机服务器上创建了一个CSR,该服务器与证书的公用名无关。要创建Java密钥库,我执行了以下两个步骤。
openssl pkcs12 -export -in common_name.cer -inkey common_name.key -out renewal.p12 -name common_name_alias -CAfile NewVerisignIM.cer -caname root
keytool -importkeystore -deststorepass XXX! -destkeypass XXX!
-destkeystore renewal.keystore -srckeystore renewal.p12 -srcstoretype PKCS12 -srcstorepass XXX! -alias common_name_alias
现在我们的证书即将到期。在Symantec网站上使用原始条目并创建新CSR时,我们获得了签名证书文件(与上面的common_name.cer相同的文件名),私钥(与上面的common_name.key相同的文件名)。在签署新的CSR之后,我们不会找回“NewVerisignIM.cer”文件,该文件似乎是根CA和中间CA组合在一个文件中(也就是我认为的CA链)。所以我不知道如何在没有该文件的情况下重新创建Java Keystore。
我尝试在签名后使用旧的“NewVerisignIM.cer”和新文件,但这不起作用。这就是我到目前为止所做的一切。
我有一个Java例外PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径
此网站包含使用原始CSR和使用JKS时的说明。
但是这个问题/答案建议使用新的CSR。
Renew certificate with Java Keytool - reuse old CSR?
如果我们使用新的CSR,我可以使用哪些命令?
答案 0 :(得分:0)
我的命令是正确的。第一个命令(X509到PKCS12)中需要 new 私钥。第一个命令中需要 new 签名证书。在第一个命令中需要创建原始证书时的原始CA链文件。续订不包含此文件作为输出。 2015年,Verisign可能尚未被赛门铁克收购,因此该文件名为" NewVerisignIM.cer"。上面的第二个命令从PKCS12转换为JKS(Java密钥库)格式。
我的问题是,作为对此服务器进行身份验证的客户端的服务器没有更新公钥,因为在续订中分配了新的私钥。请注意,Symantec建议使用此新私钥,但不是必需的。所以我必须在包含续订证书的公用名的服务器上转换这两个命令后从新创建的JKS存储中导出证书,然后从客户端Java密钥库中删除旧的公钥(条目)(在不同的服务器),并导入新的公钥,以便它可以与服务器通信(使用续订和新的私钥)。
在服务器上运行的命令(创建新的密钥库):
openssl pkcs12 -export -in common_name.cer -inkey common_name.key -out renewal.p12 -name common_name_alias -CAfile NewVerisignIM.cer -caname root
keytool -importkeystore -deststorepass XXX! -destkeypass XXX!
-destkeystore renewal.keystore -srckeystore renewal.p12 -srcstoretype PKCS12 -srcstorepass ppp1 -alias common_name_alias
keytool -export -alias https-renewal -file https-renewal.pem -keystore renewal.keystore
在客户端上运行的命令(密钥库保持不变):
keytool –delete –alias https-renewal –keystore original.keystore –storepass ppp2
keytool -import -v -alias https-renewal -file https-renewal.pem -keystore original.keystore -storepass ppp2
(其中" https-renewal.pem"是此答案中从第3个命令导出的文件)