如何从证书链中导出私钥?

如何从证书链中导出私钥?

我创建了一个密钥库,并从该密钥库生成一个 CSR 文件,当我从 CA 收到签名证书时,我将根证书和中间证书导入到我的密钥库,最后导入我的签名证书。添加签名证书后,我收到“证书回复已安装在密钥库中”的响应。在这种格式下,我可以在 Tomcat 中使用我的密钥库,但是,对于另一个应用程序容器,我只需要包含 pem 编码文件的私钥。并且

keytool -importkeystore -srckeystore server.jks -destkeystore server.pkcs -srcstoretype JKS -deststoretype PKCS12

openssl pkcs12 -in server.pkcs -out server.pem

似乎不起作用。我得到的 pem 文件仅包含证书信息,而不包含私钥。

那么建立证书链后是否可以导出私钥?如果可以,该怎么做?

答案1

您使用的 openssl pkcs12 命令也应该导出私钥

openssl pkcs12 -in server.pkcs -out server.pem

我猜测p12输入文件不包含私钥。

您确定从 p12 文件导出密钥时没有出现某种警告吗?

重要的一点是,JKS 似乎支持单独的密钥密码和存储密码。从 JKS 导出 p12 时,可能会发生 p12 的密码与密钥的密码不同。OpenSSL 似乎不支持此功能(刚试过),并导致“解密错误”。您应该确保密钥密码与 p12 密码相同。

答案2

我使用以下查询从证书链中导出私钥,

keytool -importkeystore -srckeystore server.jks -destkeystore server.pkcs 
-srcstoretype JKS -deststoretype PKCS12

openssl pkcs12 -in thekeystore.p12 -nocerts -nodes -out serverkey.pem

因此唯一的区别是添加-nodes -nocerts参数,并且它非常有效,也适用于自签名证书

相关内容