【问题标题】:Converting pfx to pem using openssl使用 openssl 将 pfx 转换为 pem
【发布时间】:2023-03-20 09:55:02
【问题描述】:

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

【问题讨论】:

    标签: openssl pem pfx


    【解决方案1】:

    尽管其他答案是正确的并且解释透彻,但我发现理解它们有些困难。这是我使用的方法(Taken from here):

    第一种情况:将 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
    

    【讨论】:

    • 在第一种情况下,即使原始证书没有密码,也会提示我输入密码。
    • @openCivilisation 您可以通过在pkcs12 之后添加-nodes 来禁用key.pem 的PEM 密码设置
    【解决方案2】:

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

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

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

    您可以阅读整个文档here。

    【讨论】:

    • 当我在“C:\Program Files\Git\usr\bin\openssl.exe”中使用 OpenSSL .exe 时,这只适用于 Windows。当我从 git bash 使用 openssl 时,我收到了 openssl pfx to pem error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong 的错误
    【解决方案3】:

    在 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. 第 2 步会提示您输入该加号,并为密钥设置密码。
    3. 第 3 步会提示您输入刚刚制作的密码以存储解密后的密码。
    4. 第 4 个将所有内容放在一个文件中。

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

    您需要两个单独的步骤来指示一个带有密钥的文件和另一个没有密钥的文件的原因是,如果您有一个同时具有加密和解密密钥的文件,HAProxy 之类的东西仍然会提示您输入使用时的密码。

    【讨论】:

    • 我还没有花时间熟悉openssl,但是pem转换不包括私钥。编辑提供了有关如何将证书和密钥合并到一个 pem 文件中的详细信息,这正是我所需要的。
    • 在 windows 系统上使用 type 而不是 cat
    • 在 Windows 上这个版本的 OpenSSL 很容易用于这样的事情:slproweb.com/products/Win32OpenSSL.html
    • 上述步骤可以很好地将 PFX 转换为 PEM。但是,我必须执行一个额外的步骤:在文本编辑器中打开 nokey PEM 文件,并将链中的最后一个证书移动到文件的顶部。否则 nginx 会抛出一个错误,抱怨证书并拒绝使用它们。
    • 在这种情况下,您可以重新排序 cat 命令以将其放在首位。比如: cat file.key file.nokey.pem > file.combo.pem 除非 file.key 本身有多个顺序错误。但无论哪种情况,您都可能以编程方式重新安排内容。
    猜你喜欢
    • 2019-08-06
    • 2011-03-07
    • 2015-01-30
    • 1970-01-01
    • 2014-11-26
    • 2023-03-04
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多