我需要将
.pfx
格式证书(从 Windows MMC)导出到 .p12
以在其他应用程序中使用。我找不到办法做到这一点。
谁能推荐一个方法吗?
.p12
和 .pfx
都是 PKCS #12 文件。我是不是错过了什么?
您是否尝试过将导出的
.pfx
文件重命名为具有 .p12
扩展名?
我在使用 openconnect 处理 .pfx 文件时遇到了问题。重命名并没有解决问题。我使用 keytool 将其转换为 .p12 并且成功了。
keytool -importkeystore -destkeystore new.p12 -deststoretype pkcs12 -srckeystore original.pfx
在我的例子中,新文件 (new.p12) 的密码必须与 .pfx 文件的密码相同。
如果您正在寻找带有 UI 的快速手动流程。我总是使用 Mozilla Firefox 从 PFX 转换为 P12。首先将证书导入 Firefox 浏览器(选项 > 隐私和安全 > 查看证书... > 导入...)。安装后,通过从证书管理器中选择证书名称来执行导出以创建 P12 文件,然后单击备份...并输入文件名,然后输入密码。
这更多的是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 文件提供的密码。
第三个命令将让您指定证书的加密密码。这是您在使用证书时将输入的内容。
运行此命令将
.cert
文件更改为 .p12
:
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt
其中
server.key
是服务器密钥,server.cert
是 CA 颁发证书或自签名证书文件。
就我而言,我想导入从 Entrust 导出的
.pfx
并将其导入到 gpgsm
。 gpgsm
不喜欢那个PFX:
$ gpgsm --import name.pfx
gpgsm: directory '/home/me/.gnupg' created
gpgsm: keybox '/home/me/.gnupg/pubring.kbx' created
gpgsm: data error at "pkcs5PBES2-params", offset 134
gpgsm: error at "bag-sequence", offset 49
gpgsm: error parsing or decrypting the PKCS#12 file
gpgsm: total number processed: 0
Paul Chan 的上述答案有效(使用 Firefox),但我想要一个命令行解决方案。
受到其他答案的启发,我只是尝试使用
openssl pcks12
进行往返,并且它有效:
# Convert pfx to pem
$ openssl pkcs12 -in name.pfx -out name.pem
# Convert pem to p12
openssl pkcs12 -export -in name.pem -out name.p12
$ gpgsm --import name.p12
gpgsm: 2456 bytes of RC2 encrypted text
# ...
gpgsm: total number processed: 3
gpgsm: imported: 2
gpgsm: secret keys read: 1
gpgsm: secret keys imported: 1
首先我们有证书.PFX文件
Step1:(提取私钥)
openssl pkcs12 -in certificate.pfx -nocerts -out private.key -passin pass:123123 -passout pass:123123
第2步:(创建P12文件)
openssl pkcs12 -export -out ewallet.p12 -inkey private.key -in certificate.cer -passin pass:123123 -passout pass:123123
似乎旧版加密算法已在 openssl 中删除,但仍在 gpsm 中使用。这意味着您必须在使用 openssl 转换密钥时显式重新启用它们:
openssl pkcs12 -in input.pfx -out output.pem
openssl pkcs12 -export -in output.pem -out output.p12 -legacy