将 .pfx 转换为 .cer
Posted
技术标签:
【中文标题】将 .pfx 转换为 .cer【英文标题】:Convert .pfx to .cer 【发布时间】:2010-09-29 00:36:35 【问题描述】:是否可以将 .pfx(个人信息交换)文件转换为 .cer(安全证书)文件?除非我弄错了,.cer 不是以某种方式嵌入到 .pfx 中吗?如果可能的话,我想要一些方法来提取它。
【问题讨论】:
【参考方案1】:我认为最简单的方法是使用 Windows 管理控制台中的证书管理器将其导入然后导出。
【讨论】:
我试过这样做,但是当我选择导出私钥时,我正在禁用 .cer(DER 编码)选项。和 midletsigner 实用程序无论如何都需要 provatekey.. 您必须在导入时选中该框,上面写着“将此密钥标记为可导出” 如何在 Windows 中访问证书管理器:msdn.microsoft.com/en-us/library/ms788967.aspx 打开 Windows 证书管理器的更简单方法是在命令提示符下键入“certmgr.msc”。 @AndrewCox,但是在将其标记为可导出和不将其标记为可导出之间有什么区别。或者它只是一个 UI 选项?【参考方案2】:PFX 文件是 PKCS#12 Personal Information Exchange Syntax Standard 包。它们可以包含任意数量的私钥以及随附的 X.509 证书和证书授权链(设置证书)。
如果要提取客户端证书,可以使用OpenSSL's PKCS12 tool。
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
【讨论】:
+1 用于解释文件是什么以及提供命令。 "Mac 验证错误:密码无效?"当我尝试它时。我不知道任何密码,我只有供应商提供的文件。 当您尝试使用其私钥转换证书时,似乎放弃“-nokeys”会起作用,比如与 Fiddler 一起使用 @Berk,除了 OpenSSL,Windows cmd 有什么办法吗?【参考方案3】:openssl rsa -in f.pem -inform PEM -out f.der -outform DER
【讨论】:
【参考方案4】:我想添加一个我认为最简单的方法。
只需右键单击 pfx 文件,按照向导单击“安装”,然后将其添加到商店(我添加到个人商店)。
在开始菜单中键入 certmgr.msc 并转到 CertManager 程序。
找到您的 pfx 证书(顶部的选项卡是各个商店),单击导出按钮并按照向导操作(有导出为 .CER 的选项)
基本上它与 Andrew 的回答做同样的事情,但它避免使用 Windows 管理控制台(直接进入导入/导出)。
【讨论】:
速度并不快,因为您仍然需要打开 certmgr.msc 才能导出它....【参考方案5】:如果您在 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-Certificate 的 -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.
【讨论】:
Export-Certificate 仅适用于某些版本,例如 Win 8.1 和 Server 2012 R2。如果您使用的是其他版本,例如 Win 7,那就没有运气了! 它应该存在于 Server 2012 和 Windows 8.0 (technet.microsoft.com/en-us/library/hh848628(v=wps.620).aspx) 中,但是关于 Windows 7 之类的好点! @IanGallagher,这与 OpenSSL 的选项相比如何? 如果你不想安装 OpenSSL 的东西,这会更方便!【参考方案6】:可能与 OP 的 Q 无关,但我尝试使用 all 不同标志的 all 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());
【讨论】:
【参考方案7】:-
从 OpenSSL\bin 文件夹启动 OpenSSL。
打开命令提示符并转到包含 .pfx 文件的文件夹。
运行以下命令提取私钥:
openssl pkcs12 -in [yourfile.pfx] -nocerts -out [drlive.key]
系统将提示您输入导入密码。键入创建 .pfx 文件时用于保护密钥对的密码。系统将再次提示您提供新密码以保护您正在创建的 .key 文件。将密钥文件的密码存储在安全的地方以避免滥用。
运行以下命令提取证书:
openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [drlive.crt]
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]
来源:https://www.ibm.com/docs/en/arl/9.7?topic=certification-extracting-certificate-keys-from-pfx-file
【讨论】:
以上是关于将 .pfx 转换为 .cer的主要内容,如果未能解决你的问题,请参考以下文章