将 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的主要内容,如果未能解决你的问题,请参考以下文章