178

是否可以将 .pfx(个人信息交换)文件转换为 .cer(安全证书)文件?除非我弄错了,.cer 不是以某种方式嵌入到 .pfx 中吗?如果可能的话,我想要一些方法来提取它。

4

7 回答 7

247

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

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

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

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

您在问题中提到了“.cer”扩展名,该扩展名通常用于 DER 编码文件。二进制编码。首先尝试“.crt”文件,如果它不被接受,很容易从 PEM 转换为 DER:

openssl x509 -inform pem -in mycerts.crt -outform der -out mycerts.cer
于 2009-01-01T22:09:55.790 回答
102

我相信的简单方法是使用 Windows 管理控制台中的证书管理器将其导入然后导出。

于 2008-12-31T15:22:54.710 回答
57

如果你在 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 编码的格式,您可以更改-TypeExport-Certificate 的参数以使用 .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.
于 2015-03-10T23:25:03.277 回答
30

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

  1. 只需右键单击 pfx 文件,按照向导单击“安装”,然后将其添加到商店(我添加到个人商店)。

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

  3. 找到您的 pfx 证书(顶部的选项卡是各个商店),单击导出按钮并按照向导进行操作(有导出为 .CER 的选项)

本质上,它与 Andrew 的回答做同样的事情,但它避免使用 Windows 管理控制台(直接进入导入/导出)。

于 2014-06-06T14:08:31.533 回答
0

可能与 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

<?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());
于 2021-01-26T15:54:32.643 回答
0
  1. 从 OpenSSL\bin 文件夹启动 OpenSSL。
  2. 打开命令提示符并转到包含 .pfx 文件的文件夹。
  3. 运行以下命令提取私钥: openssl pkcs12 -in [yourfile.pfx] -nocerts -out [drlive.key] 系统将提示您输入导入密码。键入创建 .pfx 文件时用于保护密钥对的密码。系统将再次提示您提供新密码以保护您正在创建的 .key 文件。将密钥文件的密码存储在安全的地方以避免误用。
  4. 运行以下命令提取证书: openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [drlive.crt]
  5. openssl rsa -in [drlive.key] -out [drlive-decrypted.key]

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

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

openssl rsa -in [keyfile-encrypted.key] -outform PEM -out [keyfile-encrypted-pem.key]

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

于 2021-11-28T14:11:17.310 回答
-1
openssl rsa -in f.pem -inform PEM -out f.der -outform DER
于 2009-02-12T16:49:14.200 回答