使用OpenSSL将PFX转换为PEM


109

如何使用OpenSSL从PFX文件生成.pem CA证书客户端证书

Answers:


107

您可以使用OpenSSL命令行工具。以下命令可以解决问题

openssl pkcs12 -in client_ssl.pfx -out client_ssl.pem -clcerts

openssl pkcs12 -in client_ssl.pfx -out root.pem -cacerts

如果您希望文件受到密码保护等,那么还有其他选项。

您可以在此处阅读整个文档。


191

在Linux上执行此操作的另一个角度...这是如何执行操作,以使生成的单个文件包含已解密的私钥,以便类似HAProxy的东西可以在不提示您输入口令的情况下使用它。

openssl pkcs12 -in file.pfx -out file.pem -nodes

然后,可以将HAProxy配置为使用file.pem文件。


这是来自先前版本的EDIT,在该版本中,我执行了多个步骤,直到意识到-nodes选项仅绕过了私钥加密。但我将其留在这里,因为它可能对教学有所帮助。

openssl pkcs12 -in file.pfx -out file.nokey.pem -nokeys
openssl pkcs12 -in file.pfx -out file.withkey.pem
openssl rsa -in file.withkey.pem -out file.key
cat file.nokey.pem file.key > file.combo.pem
  1. 第一步提示您输入密码以打开PFX。
  2. 第二步将提示您输入该密码,另外还要为该密钥准备一个密码短语。
  3. 第三步会提示您输入刚用来存储解密的密码。
  4. 第四部分将所有内容合并为一个文件。

然后,您可以将HAProxy配置为使用file.combo.pem文件。

之所以需要2个单独的步骤,分别用一个密钥和一个密钥来指示一个文件,是因为如果您有一个既具有加密密钥又具有解密密钥的文件,则HAProxy之类的内容仍会提示您输入密码它使用它。


我没有花时间来熟悉openssl,但是pem转换不包括私钥。修改提供了有关如何将证书和密钥合并到一个pem文件中的详细信息,正是我所需要的。
ebt

在Windows系统上,请使用type而不是cat
hupseb

在Windows上,此版本的OpenSSL易于使用,例如:slproweb.com/products/Win32OpenSSL.html
Helge Klein

上述步骤很好地将PFX转换为PEM。但是,我还必须执行另一步骤:在文本编辑器中打开nokey PEM文件,并将链中的最后一个证书移动到文件顶部。否则,nginx会在抱怨证书时抛出错误,并拒绝使用它们。
EugeneRomero

在这种情况下,您可以对cat命令重新排序以使其放在第一位。例如:cat file.key file.nokey.pem> file.combo.pem除非file.key本身具有错误顺序的多个。但是,无论哪种情况,您都可以通过编程方式重新安排。
user2415376'9

10

尽管其他答案是正确的并且经过了详尽的解释,但我发现在理解它们时仍存在一些困难。这是我使用的方法(从此处获取):

第一种情况:要将PFX文件转换为同时包含证书和私钥的PEM文件,请执行以下操作:

openssl pkcs12 -in filename.pfx -out cert.pem -nodes

第二种情况:要将PFX文件转换为单独的公钥和私钥PEM文件,请执行以下操作:

将私钥从PFX提取到PEM文件:

openssl pkcs12 -in filename.pfx -nocerts -out key.pem

导出证书(仅包括公共密钥):

openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem

从提取的私钥(可选)中删除密码(释义):

openssl rsa -in key.pem -out server.key
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.