将.p7b键转换为.pfx

我有一个.p7b格式的SSL证书,我需要转换为.pfx。 如果我通过Windows证书pipe理来尝试这个选项,专家作为.pfx被禁用。

尝试openssl我已经find了以下两个命令来做转换:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer 

但是我不确定使用第二个命令或CACert.cer引用什么证书的关键。

如何将此密钥转换为.pfx格式?

PKCS#7不包含证书/私钥对的私钥(密钥)部分,通常用于证书传播(例如,作为对PKCS#10证书请求的响应,作为分发S / MIME证书的手段用于encryption消息或validation签名的消息等)。 记住这一点很重要,只适用于定义公共项目的证书。

PKCS#12是一个更普遍的容器 – 它的目的是将私钥和公共证书部分存储在一起,以便它们可以移动。 它具有密码保护function,可以为密钥提供一些保护。

PFX是PKCS#12的前身。

你不能(如Anitak指出的)从PKCS#7转换到PKCS#12而没有附加数据(私钥部分),因为PKCS#7没有所有的数据。

马克·萨顿(Mark Sutton)已经指出了为什么你不能以PFX出口 – 有问题的证书的私钥被标记为不可输出。 密码服务提供商(CSP)将不允许移动该密钥,这是故意的。 唯一可以获得可导出证书/密钥对的方法是,如果原始证书是在设置了可导出标记的情况下发出的。 也可能没有与证书相关的私钥,但我认为这不是这种情况。

维基百科上的各种PKCStypes有一个很好的总结。

  • 至less是唯一合法的方式。 根据CSP \ Crypto硬件,可能会有机制,尤其是仅用于软件CSP的机制,但这只是我所关心的安全漏洞研究领域,而不是系统pipe理员。

我每两年(当我续签一个代码签名证书时)都会经历这个过程,每次都是痛苦的。

一个关键的信息是,你可以简单地将.p7b文件重命名为.spc(如此处所述: http : //support.microsoft.com/kb/269395 )。

然后,您可以使用pvk2pfx.exe工具将您的PVK + SPC转换为PFX。

 pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password> 

(您可以跳过p7b重命名步骤并直接使用它;我没有尝试…)

使用Windows工具如果禁用了pfx选项,则意味着私钥不能从本地存储中导出。 这是因为它不在那里(因为密钥没有在您使用的框上生成),或者因为当您生成密钥时,私钥没有标记为可导出,而且Windows证书模板未configuration为允许导出。

我假设您使用Microsoft证书颁发机构颁发您的证书。 它是否正确?

如果是的话: –

1.确保证书模板允许导出私钥。
2.您如何生成您的证书请求,您可以使用以下技术

创buildINF文件如下

[版]
签名=“$ Windows NT $

[NewRequest]
主题=“等等”
KeySpec = 1
导出= 1
MachineKeySet = TRUE
的ProviderName = “CSPName”
ProviderType = 1

[RequestAttributes] CertificateTemplate =

注意Exportable = 1
然后在命令提示符处使用fllowing命令

certreq -new infile.inf reqfile.req //其中infile.inf是上面的文件,reqfile是输出请求文件

certreq -submit -config \ reqfile.req //将证书请求提交给CA.

一旦完成,您将能够将证书导出为pfx

或者转到http://www.blacktipconsulting.com/Site/Products.html在那里我把我的免费命令行工具,为你做所有这一切,一旦完成导出证书为pfx

我可能是错的,但是我认为你的PCKCS#7文件只包含你公钥的一半。

PKCS#12文件需要两个半部分 – 因此为什么需要-inkey选项。

正如Helvick指出的,PKCS10的回应是PKCS7,它不包含私钥。 因此,在生成CSR时,您应该已经生成了privatekey.key文件。 您可以使用以下命令。 (我知道这是四年前的问题,但我不能按照页面上的讨论来做)。

 openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12 

祝你好运!

问候,JE