使用OpenSSL将PKCS#12证书转换为PEM

我在Windows 7上安装了OpenSSL x64,我从Google Code上的openssl-for-windows下载。 我试图运行:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 

但是我得到一个错误。

 unable to load private key 

如何使用OpenSSL从PKCS#12商店中提取PEM中的证书?

尝试:

 openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes 

之后你有:

  • 证书在newfile.crt.pem
  • 私钥在newfile.key.pem中

要将证书和密钥放在同一个文件中,请使用以下内容

 openssl pkcs12 -in path.p12 -out newfile.pem 

你只需要提供一个密码。 您可以在相同的命令行中使用以下语法来执行此操作:

 openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] 

您将被提示input密码来encryption输出文件中的私钥。 如果要导出未encryption的私钥(明文),请在上面的行中包含“节点”选项:

 openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] -nodes 

更多信息: http : //www.openssl.org/docs/apps/pkcs12.html

如果你可以使用Python,如果你有pyOpenSSL就更容易。 这里是:

 from OpenSSL import crypto # May require "" for empty password depending on version p12 = crypto.load_pkcs12(file("push.p12", 'rb').read()[, password]) # PEM formatted private key print crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey()) # PEM formatted certificate print crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate()) 

这将与一个.pem文件在同一个文件中有私钥和证书(我尝试了这个苹果推送通知证书)

PushNotif.pem包含私钥和证书在一个文件中)

$ openssl pkcs12 -export -in PushNotif.pem -inkey PushNotif.pem -out PushNotif.p12
inputPushNotif.pem的密码短语:
input导出密码:
validation – input导出密码:

一旦你input你的密码,你很好去。

我有一个PFX文件,需要为NGINX创buildKEY文件,所以我这样做了:

 openssl pkcs12 -in file.pfx -out file.key -nocerts -nodes 

然后我不得不编辑KEY文件并删除所有内容-----BEGIN PRIVATE KEY----- 。 之后,NGINX接受了KEY文件。