如何从PFX以PEM格式导出CA证书链而没有包属性


31

我有一个包含完整证书链和私钥的PKCS12文件。我需要将其分解为3个文件用于一个应用程序。我需要的3个文件如下(PEM格式):

  • 未加密的密钥文件
  • 客户端证书文件
  • CA证书文件(根目录和所有中间文件)

这是我必须执行的常见任务,因此我正在寻找一种无需手动编辑输出即可执行此操作的方法。

我尝试了以下方法:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

这很好用,但是输出包含bag属性,应用程序不知道该属性。

经过一番搜索,我找到了一种建议的解决方案,将结果通过x509传递以剥离bag属性。

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

这可行,但是我在cacert文件上遇到了问题。输出文件仅包含链中3个证书之一。

有没有办法避免在pkcs12命令的输出中包含bag属性,还是有办法使x509命令的输出包含所有证书?另外,如果通过x509运行它是最简单的解决方案,是否有办法将pkcs12的输出通过管道传递到x509,而不是两次写入文件?

Answers:


36

我最终想到的解决方案是将其通过sed传递。

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

谢谢!今天为我节省了一些时间!;-)
Jim P.

非常感谢!
PaulJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.