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

Dea*_*gor 189 command openssl pkcs#12

我在Windows 7上安装了OpenSSL x64,我是从Google Code上的openssl-for-windows下载的.我正试图跑:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误.

unable to load private key
Run Code Online (Sandbox Code Playgroud)

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

kmx*_*kmx 469

尝试:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes
Run Code Online (Sandbox Code Playgroud)

之后你有:

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

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

openssl pkcs12 -in path.p12 -out newfile.pem
Run Code Online (Sandbox Code Playgroud)

如果您需要直接从命令行输入PKCS#12密码(例如脚本),只需添加-passin pass:${PASSWORD}:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin 'pass:P@s5w0rD'
Run Code Online (Sandbox Code Playgroud)

  • 是的,它是:`openssl pkcs12 -in path.p12 -out newfile.pem` (15认同)
  • @SaurabhChandraPatel您必须知道证书的密码.这不是恢复忘记密码的方法 (4认同)
  • 私钥和证书是否可能存储在同一* .pem文件中? (2认同)
  • 要求输入密码.那是什么 ? (2认同)
  • 省略-nodes,不会提取私钥。 (2认同)

小智 19

您只需提供密码即可.您可以使用以下语法在同一命令行中执行此操作:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password]
Run Code Online (Sandbox Code Playgroud)

然后,系统将提示您输入密码以加密输出文件中的私钥.如果要导出未加密的私钥(明文),请在上面的行中包含"nodes"选项:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] -nodes
Run Code Online (Sandbox Code Playgroud)

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


KVI*_*ISH 16

如果你可以使用Python,那么如果你有这个pyopenssl模块就更容易了.这里是:

from OpenSSL import crypto

# May require "" for empty password depending on version

with open("push.p12", "rb") as file:
    p12 = crypto.load_pkcs12(file.read(), "my_passphrase")

# 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())
Run Code Online (Sandbox Code Playgroud)

  • 如果使用python 3,您可能需要将内容写入文件:```with open(“ push.pem”,“ wb”)as fobj:fobj.write(crypto.dump_certificate(crypto.FILETYPE_PEM,p12.get_certificate ()))```将证书和带有open(“ push.key”,“ wb”)的fobj写入为fobj:fobj.write(crypto.dump_privatekey(crypto.FILETYPE_PEM,p12.get_privatekey())) ```为关键。 (2认同)

Ser*_*nov 12

有一个免费的开源 GUI 工具KeyStore Explorer可与加密密钥容器一起使用。使用它,您可以将证书或私钥导出到单独的文件中,或将容器转换为其他格式(jks、pem、p12、pkcs12 等)

在此输入图像描述


Ilj*_*iko 7

openssl在通过安装的Macbook M1 上,homebrew我必须添加-legacy选项:

openssl pkcs12 -in certificate.p12 -out certificate.pem -noenc -legacy