将.pfx 转换为

是否可以将。Pfx (个人信息交换)文件转换为。(保安证书)档案?如果我没记错的话。某种程度上嵌入了一个。Pfx?如果可能的话,我想想办法把它取出来。

390611 次浏览

我认为简单的方法是导入然后导出,使用 Windows 管理控制台中的证书管理器。

PFX 文件是 PKCS # 12个人资料交换语法标准包。它们可以包括任意数量的私钥和随附的 X.509证书以及证书颁发机构链(集证书)。

如果要提取客户端证书,可以使用 OpenSSL 的 PKCS12工具

openssl pkcs12 -in input.pfx -out mycerts.crt -nokeys -clcerts

上面的命令将输出 PEM 格式的证书。“ . crt”文件扩展名由 macOS 和 Window 处理。

你提到”。这个扩展名通常用于 DER 编码的文件。二进制编码。试试“。首先是“ crt”文件,如果不被接受,很容易从 PEM 转换为 DER:

openssl x509 -inform pem -in mycerts.crt -outform der -out mycerts.cer
openssl rsa -in f.pem -inform PEM -out f.der -outform DER

我想添加一个我认为最简单的方法。

  1. 只需右键单击 pfx 文件,单击向导后面的“ Install”,然后将其添加到一个存储(我添加到了 Personal store)。

  2. 在开始菜单中键入 certmgr.msc 并转到 CertManager 程序。

  3. 找到您的 pfx 证书(顶部的选项卡是各种存储) ,单击 export 按钮并按向导操作(有一个选项可以将其导出为。CER)

本质上,它和 Andrew 的答案是一样的,但是它避免使用 Windows 管理控制台(直接导入/导出)。

如果您在 PowerShell 中工作,您可以使用下面的代码,给定一个 pfx 文件 InputBundle.pfx,生成一个 DER 编码(二进制)证书文件 OutputCert.der:

Get-PfxCertificate -FilePath InputBundle.pfx |
Export-Certificate -FilePath OutputCert.der -Type CERT

为了清晰起见,新行添加了这些内容,当然,您可以将这些内容集中在一行中。

如果您需要 ASCII/Base64编码的 PEM 格式的证书,您可以采取额外的步骤来完成,如下所示: https://superuser.com/questions/351548/windows-integrated-utility-to-convert-der-to-pem

如果需要导出为不同于 DER 编码的格式,可以更改 Export-Securities 的 -Type参数以使用。NET,正如在 help Export-Certificate -Detailed中看到的:

-Type <CertType>
Specifies the type of output file for the certificate export as follows.
-- SST: A Microsoft serialized certificate store (.sst) file format which can contain one or more certificates. This is the default value for multiple certificates.
-- CERT: A .cer file format which contains a single DER-encoded certificate. This is the default value for one certificate.
-- P7B: A PKCS#7 file format which can contain one or more certificates.

可能与 OP 的 Q 无关,但是我尝试了 所有 openssl 语句和 所有的不同标志,同时尝试连接到 PHP \SoapClient(...),3天后我终于找到了一个适合我的解决方案。

GitBash

$ cd path/to/certificate/
$ openssl pkcs12 -in personal_certificate.pfx -out public_key.pem -clcerts

首先你必须输入 YOUR_CERT_PASSWORD一次,然后 DIFFERENT_PASSWORD!两次。后者可能对每个能够访问代码的人都可用。

PHP

$wsdlUrl   = "https://example.com/service.svc?singlewsdl";
$publicKey = "rel/path/to/certificate/public_key.pem";
$password  = "DIFFERENT_PASSWORD!";


$params = [
'local_cert' => $publicKey,
'passphrase' => $password,
'trace' => 1,
'exceptions' => 0
];


$soapClient = new \SoapClient($wsdlUrl, $params);


var_dump($soapClient->__getFunctions());
  1. 从 OpenSSL bin 文件夹启动 OpenSSL。
  2. 打开命令提示符并转到包含. pfx 文件的文件夹。
  3. 运行以下命令提取私钥: Openssl pkcs12-in [ yourfile.pfx ]-nocerts-out [ drlive.key ] 系统将提示您键入导入密码。创建密钥对时,键入用于保护密钥对的密码。Pfx 文件。将再次提示您提供新密码以保护。正在创建的密钥文件。将密钥文件的密码存储在安全的地方,以避免误用。 运行以下命令提取证书: Openssl pkcs12-in [ yourfile.pfx ]-clcerts-nokeys-out [ drlive.crt ]
  4. Openssl rsa-in [ drlive.key ]-out [ drlive-deccrypted. key ]

将.pfx 文件转换为.pem 格式

在某些情况下,您可能必须将。将 pfx 文件转换为。Pem 格式。运行以下命令将其转换为 PEM 格式。

Openssl rsa-in [ keyfile-crypted. key ]-outform PEM-out [ keyfile-crypted-PEM. key ]

来源: https://www.ibm.com/docs/en/arl/9.7?topic=certification-extracting-certificate-keys-from-pfx-file

您可以使用以下命令从. pfx 中提取 ca-bundle、 . crt 和. key。

# Extracting ca-certs..."
openssl pkcs12 -in ${filename}.pfx -nodes -nokeys -cacerts -out ${filename}-ca.crt


# Extracting key file..."
openssl pkcs12 -in ${filename}.pfx -nocerts -out ${filename}.key


# Extracting crt..."
openssl pkcs12 -in ${filename}.pfx -clcerts -nokeys -out ${filename}.crt


# combine ca-certs and cert files
cat  ${filename}.crt ${filename}-ca.crt > ${filename}-full.crt


# Removing passphrase from keyfile"
openssl rsa -in ${filename}.key -out ${filename}.key