使用新CSR(而不是原始CSR)通过Symantec续订来续订Java密钥库的命令

使用新CSR(而不是原始CSR)通过Symantec续订来续订Java密钥库的命令,java,ssl,centos,keytool,pkix,Java,Ssl,Centos,Keytool,Pkix,两年前,我获得了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

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

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


如果我们使用新的CSR,我可以使用什么命令?

我的命令是正确的。PKCS12的第一个命令X509中需要新的私钥。第一个命令中需要新的签名证书。并且在第一个命令中需要创建原始证书时的原始CA链文件。续订未将此文件作为输出包含。2015年,Verisign可能尚未被赛门铁克收购,因此该文件名为NewVerisignIM.cer。上面的第二个命令将PKCS12转换为JKS Java密钥库格式

我的问题是,作为针对该服务器进行身份验证的客户端的服务器没有更新公钥,因为在续订中分配了新的私钥。请注意,赛门铁克建议使用此新私钥,但不是必需的。因此,在服务器上转换了包含续订证书通用名称的这两个命令后,我必须从新创建的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是从该答案中的第三个命令导出的文件

如果您想使用新的CSR,只需执行与您最初相同的步骤即可。CA给你的证书格式是什么?有没有办法用openssl检查格式?我不确定,但在文本编辑器或文件扩展名中打开它会让你有所了解。在签名的证书X.cer上,---BEGIN certificate---And---END certificate---之间的文本有33行64列。最后一行末尾缺少9个字符。私钥X.key稍微小一些。它可能只是用户证书,而不是整个链。您需要从CA获得子CA和CA证书。CA通常在其网站上提供这些证书。您可以查看证书的“颁发者DN”,以查看哪个CA签署了您的证书。一旦拥有了整个证书链,就可以使用keystoreapi用私钥和整个证书链构建Java密钥库。Keytool不提供这种对证书链进行clubing的功能。必须手动完成,这可以使用密钥库api完成。您已将签名证书(而不仅仅是公钥)导入客户端信任库。我不知道你为什么要对CA签名的证书这么做。Oracle的文档不正确吗?这是不正确的,因为它将公钥与证书、密钥库与信任库混为一谈,但它也完全无关,因为它是关于使用自签名证书进行代码签名的,而您的问题是关于CA签名的SSL证书。它也不是“文档”,而是一个教程,因此不是一个规范性参考。我找到了这个资源,但还没有测试任何东西。我可能会问另一个问题,因为我们不太确定从公共PKI证书导出公钥的正确命令是什么。我认为Symantec证书密钥库的格式与自签名证书密钥库的格式相同,并且命令也相同。因为最终结果密钥库是相同的。请参见此处投票最多的答案中与自签名密钥库创建相关的最后两个命令: