我创建了一个密钥库,并从该密钥库生成一个 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
参数,并且它非常有效,也适用于自签名证书