如何在没有私钥的情况下创建 .p12 或 .pfx 文件?

Posted

技术标签:

【中文标题】如何在没有私钥的情况下创建 .p12 或 .pfx 文件?【英文标题】:How can I create a .p12 or .pfx file without a private key? 【发布时间】:2014-07-19 02:31:30 【问题描述】:

我正在尝试创建一个不包含有效身份(公钥/私钥对)的 .p12 文件,以测试我的应用的证书导入功能。使用openssl 工具可以做到这一点吗?

我试过了

openssl pkcs12 -in client-certonly.pem -export -out client-certonly.p12

但我得到一个错误:

unable to load private key
471:error:0906D06C:PEM routines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c:648:Expecting: ANY PRIVATE KEY

如果使用openssl 无法做到这一点,我可以使用其他工具吗?

【问题讨论】:

【参考方案1】:

有一个用 java 编写的非常方便的 GUI 工具,名为 portecle,您可以使用它来创建一个空的 PKCS#12 密钥库,也可以将没有私钥的证书导入 PKCS#12 密钥库 - 这个功能在“导入受信任的证书 (Ctrl-T)”按钮下可用。

但是如果你坚持使用 OpenSSL,你可以使用这个命令:

openssl pkcs12 -export -nokeys -in certificate.cer -out pkcs12.pfx

【讨论】:

谢谢,成功了。你知道openssl是否可以做到这一点? * 注意!在 Windows 机器上,您必须以管理员身份运行 open ssl 我收到了unable to load certificates 显然 Java 不喜欢这个命令产生的格式,所以如果你将它用于 Java 信任库,这里是等效的keytool 命令:keytool -import -alias mycert -file certificate.cer -keystore truststore.p12 -storetype PKCS12 -storepass password 虽然这可行,但信任库无法与 Java 一起使用。 sun.security.pkcs12.KCS12KeyStore 要求所有信任证书具有以下包属性: joint-iso-itu-t(2) country(16) us(840) organization(1) oracle(113894) jdk(746875) crypto(1) id-at-trustedKeyUsage(1)【参考方案2】:

对于遇到问题并收到错误消息“无法加载证书”的任何人,请尝试以下方法:

openssl.exe x509 -inform der -in "C:\Temp\myfile.cer" -out "c:\Temp\myfile.pem"

openssl.exe pkcs12 -export -out "c:\Temp\myfile.pfx" -nokeys -in "c:\Temp\myfile.pem"

【讨论】:

以上是关于如何在没有私钥的情况下创建 .p12 或 .pfx 文件?的主要内容,如果未能解决你的问题,请参考以下文章

pfx文件是不是包含根证书

java 证书 .cer 和 .pfx

如何在钱包中没有私钥的情况下检查 0 确认比特币交易?

数字证书

如何在没有私钥的情况下将我的元掩码钱包中的 erc20 代币发送到其他地址?

仅使用公钥的 CER 证书