将GoDaddy发布的.spc和.key文件加入到完整的.pfx / .cer证书中

时间:2011-01-13 16:44:54

标签: certificate key code-signing pfx spc

我在.spc文件中有一个GoDaddy发布的代码签名证书。另外,我在.key文件中有一个私钥。代码签名已于13个月前发布,然后过期并与GoDaddy续签。在续订过程中,没有请求私钥,只有一个新的.spc文件出现问题。

现在我遇到了将原始私钥文件与问题证书一起加入以形成适合安装到Windows证书库的.pfx(或.cer?)文件的问题。

我正在尝试的命令是:

openssl.exe pkcs12 -inkey my.key -in my.spc -out my.pfx -export

但是,我收到一条错误消息,内容为“没有证书与私钥匹配”

我已按照this answer on SO验证.key文件是否为有效私钥。但是,当我尝试验证.spc是否为有效证书时,我只是

unable to load certificate 
5436:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

从输入中生成.pfx文件的正确方法是什么?我正在使用OpenSSL 0.9.8k。

6 个答案:

答案 0 :(得分:30)

最后,我设法找出一个有效的程序。以下是从SPC和KEY文件生成新的PFX和CER代码签名证书的步骤:

  1. 从GoDaddy获取新的CodeSign.spc证书。
  2. 从过期的PFX中导出PEM格式的私钥:

    openssl.exe pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
    
  3. 将PEM格式的私钥转换为PVK格式:

    pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk
    
  4. 将PVK和SPC合并到PFX中:

    pvk2pfx.exe -pvk CodeSign.pvk -pi <passphrase> -spc CodeSign.spc -pfx CodeSign.pfx -po <passphrase> -f
    
  5. 将生成的PFX文件导入Windows证书库。记得让它可以出口。

  6. 将其从证书存储区导出为CodeSign.cer的二进制CER格式。
  7. (可选)从Windows证书库中删除证书。
  8. 如果您定期续订证书,可以存储PVK文件并跳过步骤(2)和(3)。

    更新:如果您碰巧拥有CRT而非SPC格式的证书,请执行以下操作将其转换为SPC:

    openssl crl2pkcs7 -nocrl -certfile CodeSign.crt -outform DER -out CodeSign.spc
    

    来源:

    您需要的工具:

    • OpenSSL
    • pvk.exe - 请参阅该页面底部的下载链接(原始位置可能无法访问;在这种情况下,请参阅this article,其中包含指向镜像站点的链接)
    • pvk2pfx.exe - 部分Microsoft SDK,随Visual Studio 2010安装

答案 1 :(得分:6)

我遇到了类似的问题,我花了至少几个小时来寻找解决方案。 GoDaddy为我提供了.spc和.pem文件,如果使用OpenSSL,则无法创建.pfx文件。最后,我使用MMC在本地计算机中导入了.spc文件。将证书导入本地计算机后,我注意到该证书将GoDaddy的链文件以及Code Sign Cert文件本身引入了。 MMC View

现在,选择两个文件,然后右键单击以导出为.pfx文件。提供密码来保护文件,您已完成。到目前为止,这是最简单直接的解决方案。希望这篇文章对很多人有帮助。

答案 2 :(得分:3)

当前的答案帖对我来说非常有帮助,从过期的证书文件(.pfx或.p12)转移到GoDaddy的新文件,但我发现它缺乏有关如何的初始步骤的信息从我的原始证书文件生成证书签名请求(CSR)。

对于其他寻找类似信息的人来说,这就是我最终使用的......

获取私钥:

openssl pkcs12 -in certs-and-key.p12 -out privateKey.key

获得证书:

注意:这可以为您提供CA证书

openssl pkcs12 -in certs-and-key.p12 -out certificate.crt -nokeys

更好:使用此命令仅打印客户端证书

openssl pkcs12 -in MacCossLabUW.p12 -clcerts

然后在以下之间复制输出:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

将其保存到名为certificate.crt

的文件中

现在检查私钥和证书是否与命令匹配:

openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl x509 -noout -modulus -in certificate.crt | openssl md5

然后生成一个新的CSR:

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

使用CSR重新锁定证书。

下载GoDaddy软件发布证书(.spc)文件。

验证生成的证书是否与请求私钥匹配:

openssl pkcs7 -inform DER -in certificate.spc -print_certs

然后在您的证书之间复制输出(注意:输出也将包含CA证书):

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

保存到名为certificate-new.crt的文件

运行命令:

openssl x509 -noout -modulus -in certificate-new.crt | openssl md5

输出应与先前与私钥和请求证书一起使用的呼叫匹配。

要完成此过程,请按照pvk2pfx的答案中列出的步骤进行操作。

我还发现这篇文章中的原理图非常有用:

PVK2PFX Error 0x80070490 - Cannot find certificates that match the key

答案 3 :(得分:2)

您只能使用openssl创建PFX。

  1. 从过期的PFX中导出PEM格式的私钥:

    openssl pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
  2. 创建PFX

    openssl pkcs7 -in CodeSign.spc -inform der -print_certs | openssl pkcs12 -export -inkey CodeSign.pem -out CodeSign.pfx

答案 4 :(得分:1)

对于仍在寻找解决方法的任何人,我花了一天的时间弄清楚了这一点,并且不得不将本文中列出的内容混合在一起。如果您在Windows上使用git-bash,则必须使用openssl将winpty添加到所有调用的开头,否则它将陷于空白中。伪步骤如下:

  1. 使用openssl生成私钥和CSR
openssl req -newkey rsa:2048 -keyout private.key -out my.csr
  1. 使用带有openssl的私钥生成PVK
openssl rsa -in private.key -outform PVK -pvk-strong -out codesign.pvk
  1. 在Godaddy上使用CSR生成代码签名证书
  2. 从Godaddy下载邮政编码并提取SPC文件(如OP所述)
  3. 使用pvk2pfx将PVK和SPC文件组合为代码签名证书。它与signtool本身包含在同一SDK(和目录)中:
pvk2pfx.exe -pvk codesign.pvk -spc SPC_FILEPATH_HERE -pfx codesign.pfx -pi PVK_PASSWORD -po PFX_PASSWORD

答案 5 :(得分:-1)

如果您从IIS生成了证书请求(我在Windows 2012 Server上的IIS上执行了此操作),请在生成请求的服务器/ PC上执行以下步骤 - 打开IIS - 单击顶级节点(服务器节点) - 打开“服务器证书”设置 - 单击右侧操作下的“完成证书申请” - 将spc文件导入服务器。

然后,您可以从此处导出到PFX文件

相关问题