将 pfx 格式转换为 p12

我需要导出一个 .pfx格式的证书(从 WindowsMMC)到 .p12在另一个应用程序中使用。我找不到这样做的方法。

有人能提出一个方法吗?

254250 次浏览

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

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

我遇到了麻烦。具有 openconnect 的 pfx 文件。重命名并没有解决问题。我用 keytool 把它转换成。P12起作用了。

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

在我的示例中,新文件(new.p12)的密码必须与。Pfx 文件。

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

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

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

这更像是 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文件提供的密码。

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

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

首先我们有证书 PFX 文件

步骤1: (提取私钥)

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

在我的例子中,我想要导入一个从 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