0

两年前,我获得了 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

现在我们的证书即将到期。当使用赛门铁克网站上的原始条目,并创建一个新的 CSR 时,我们得到了签名证书文件(与上面的 common_name.cer 相同的文件名)、私钥(与上面的 common_name.key 相同的文件名)。签署新的 CSR 后,我们没有取回“NewVerisignIM.cer”文件,该文件似乎是根 CA 和中间 CA 组合在一个文件中(我相信也就是 CA 链)。所以我不知道如何在没有该文件的情况下重新创建 Java 密钥库。

我尝试在签名后将旧的“NewVerisignIM.cer”与新文件一起使用,但这不起作用。到目前为止,这就是我所尝试的。我有一个 Java 异常

PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

本网站包含使用原始 CSR 和使用 JKS 的说明。

https://knowledge.symantec.com/kb/index?page=content&id=SO11942&pmv=print&actp=PRINT&viewlocale=en_US

但是这个问题/答案建议使用新的 CSR。

使用 Java Keytool 更新证书 - 重用旧 CSR?

如果我们使用新的 CSR,我可以使用哪些命令?

4

1 回答 1

1

我的命令是正确的。第一个命令(X509 到 PKCS12)需要的私钥。第一个命令中需要的签名证书。并且在第一个命令中需要创建原始证书时的原始 CA 链文件。续订不包含此文件作为输出。2015年,威瑞信可能还没有被赛门铁克收购,所以文件被命名为“NewVerisignIM.cer”。上面的第二个命令将 PKCS12 转换为 JKS (Java Keystore) 格式。

我的问题是充当客户端的服务器对这个服务器进行身份验证没有更新公钥,因为在续订中分配了一个新的私钥。请注意,赛门铁克推荐使用此新私钥,但不是必需的。因此,我必须在服务器上包含续订证书公用名的这两个命令转换后,从新创建的 JKS 存储中导出证书,然后从客户端 Java Keystore 中删除旧的公钥(条目)(在不同的服务器),并导入新的公钥,以便它可以与服务器通信(使用更新和新的私钥)。

在服务器上运行的命令(创建新的密钥库):

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”是从这个答案中的第三个命令导出的文件)

于 2017-06-08T17:52:33.313 回答