将 pfx 格式转换为 p12

Posted

技术标签:

【中文标题】将 pfx 格式转换为 p12【英文标题】:convert pfx format to p12 【发布时间】:2011-10-12 17:48:31 【问题描述】:

我需要将.pfx 格式证书(来自 windows mmc)导出到 .p12 以在另一个应用程序中使用。我找不到办法做到这一点。谁能推荐一个方法?

【问题讨论】:

【参考方案1】:

.p12.pfx 都是 PKCS #12 文件。我错过了什么吗?

您是否尝试将导出的 .pfx 文件重命名为具有 .p12 扩展名?

【讨论】:

让你想知道为什么它们是两个不同的文件扩展名,如果它们在引擎盖下真的是同一个东西。 有两个文件扩展名的原因是历史原因。 PFX 是 Microsoft 的扩展,而 P12 是 Netscape 的扩展。两种格式现在都已调整为相同,这意味着开发人员可以使用 .NET System.Security.Cryptography.X509Certificates 命名空间来处理这两种格式。请参阅here 了解更多信息。 PKCS #12 文件的文件扩展名是“.p12”或“.pfx”。微软的“PFX”因为是最复杂的加密协议之一而受到严厉批评。 PKCS #12 是微软“PFX”的继任者。 PKCS #12 是 RSA 实验室发布的称为公钥加密标准 (PKCS) 的标准系列之一。 重命名并不总是有效,因为。例如,如果您使用 SoapUI 并对其进行 2 路身份验证,则它会失败。 p12 和 pfx 的历史可以追溯到 Netscape 和 IE。它们几乎是相同但不相同的文件。所以一些应用程序可以理解这两种扩展,而其他应用程序需要 100% 兼容的有效 p12,例如 SoapUI 这在我们的案例中根本不起作用。尽管它们都应该是 PCKS12 文件,但重命名不起作用,我还没有加载十六进制编辑器来查看为什么不起作用。【参考方案2】:

我在使用 openconnect 的 .pfx 文件时遇到了问题。重命名并没有解决问题。我使用 keytool 将其转换为 .p12 并且有效。

keytool -importkeystore -destkeystore new.p12 -deststoretype pkcs12 -srckeystore original.pfx

在我的情况下,新文件 (new.p12) 的密码必须与 .pfx 文件的密码相同。

【讨论】:

没有用,即使我对两者都使用了相同的密码。收到错误“keytool 错误:java.io.IOException:无效的密钥库格式” 它对我有用,感谢 keytool 的命令 在 TeamCity 中更新我的 SSL 证书时,这是一个很棒的帮助。谢谢。 因为我也必须更改密码,所以我在此命令中添加了选项-destkeypass,它就像一个魅力。【参考方案3】:

如果您正在寻找使用 UI 的快速手动流程。我总是使用 Mozilla Firefox 将 PFX 转换为 P12。首先将证书导入 Firefox 浏览器(选项 > 隐私和安全 > 查看证书... > 导入...)。安装后,通过从证书管理器中选择证书名称执行导出以创建 P12 文件,然后单击备份...并输入文件名,然后输入密码。

【讨论】:

【参考方案4】:

这更像是 jglouie 回应的延续。

如果您使用 openssl 将 PKCS#12 证书转换为公共/私有 PEM 密钥,则无需重命名文件。假设文件名为 cert.pfx,以下三个命令将创建一个公共 pem 密钥和一个加密的私有 pem 密钥:

openssl pkcs12 -in cert.pfx     -out cert.pem     -nodes -nokeys
openssl pkcs12 -in cert.pfx     -out cert_key.pem -nodes -nocerts
openssl rsa    -in cert_key.pem -out cert_key.pem -des3

前两个命令可能会提示输入导入密码。这将是随 PKCS#12 文件提供的密码。

第三个命令将让您指定证书的加密密码。这是您在使用证书时将输入的内容。

【讨论】:

第一个命令会覆盖第二个命令,所以也许只需执行第 2 步和第 3 步。仅供读者参考,Des3 是私钥的默认加密。【参考方案5】:

运行此命令将.cert文件更改为.p12

openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt 

其中server.key 是服务器密钥,server.cert 是 CA 颁发证书或自签名证书文件。

【讨论】:

【参考方案6】:

首先我们有证书.PFX 文件

第一步:(提取私钥)

openssl pkcs12 -in certificate.pfx -nocerts -out private.key -passin pass:123123 -passout pass:123123

Step2:(创建P12文件)

openssl pkcs12 -export -out ewallet.p12 -inkey private.key -in certificate.cer -passin pass:123123 -passout pass:123123

【讨论】:

以上是关于将 pfx 格式转换为 p12的主要内容,如果未能解决你的问题,请参考以下文章

[证书] OPENSSL将PFX证书转换为PEM格式

将 .jks 转换为 p12

将证书链添加到 p12(pfx) 证书

text 如何将.pfx SSL证书转换为.crt / key(pem)格式。对NGINX很有用

Pfx 基本编码字符串到 p12 证书

将.crt、.cer、.pfx、.p7b、.der的ssl证书转换成.pem格式