【发布时间】:2012-04-22 22:20:41
【问题描述】:
我们丢失了用于在服务器故障期间生成 CSR 的原始密钥库。我们有私钥(.key 文件)和原始 CSR(.csr 文件)的备份。是否可以用这些重建密钥库?由于创建证书链的所有说明都需要原始密钥库。
这适用于 Tomcat 7.0.27。
谢谢
【问题讨论】:
我们丢失了用于在服务器故障期间生成 CSR 的原始密钥库。我们有私钥(.key 文件)和原始 CSR(.csr 文件)的备份。是否可以用这些重建密钥库?由于创建证书链的所有说明都需要原始密钥库。
这适用于 Tomcat 7.0.27。
谢谢
【问题讨论】:
是的,这应该是可能的。但除了私钥之外,您还需要 CA 返回的证书(不是 csr)。步骤可以找到here
【讨论】:
如果您只有 CSR 文件和丢失的证书,由 CA(Thawte 等)签名,您可以再次将此 CSR 发送给 CA 进行签名。
暗示,您拥有由 CA 签署的 PEM 格式的密钥和证书。
将证书和密钥转换为 PKCS#12 容器:
openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -out server.p12 -name test_server -caname root_ca -chain -CAfile cacert.pem
caname、chain 和 CAfile 是可选参数,它们将 CA 链添加到容器中。
Tomcat 支持 PKCS#12 证书,但如果你想要 JKS,可以通过 keytool 从 PKCS#12 完成(从 Java 6 开始):
keytool -importkeystore -deststorepass mypass -destkeypass mypass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass p12pass -srcalias test_server -destalias test_server
【讨论】:
-chain 的注释在 this answer 中,对于 pkcs7 文件,使用 openssl pkcs7 -in file.pem -print_certs -out certs.pem。
“证书链长度”出现与“1”相同的问题,尝试了多种方法后,我刚刚开始失去希望,但通过安装和使用 APR 设法解决:
https://stackoverflow.com/a/22391211/2802916
现在 server.xml 中的连接器如下所示:
<Connector port="443"
SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="false"
SSLCertificateFile="thecertificate.cer"
SSLCertificateKeyFile="privatekey.key"
SSLCACertificateFile="intermediate.crt"
SSLPassword="thePassForPrivateKey"
/>
【讨论】:
似乎我们让它正常工作的唯一方法是撤销我们现有的证书并用新的 CSR 续订它。
【讨论】: