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

Ond*_*cny 18 key code-signing certificate pfx spc

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

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

我正在尝试的命令是:

openssl.exe pkcs12 -inkey my.key -in my.spc -out my.pfx -export
Run Code Online (Sandbox Code Playgroud)

但是,我收到一条错误消息,显示"没有证书与私钥匹配".

在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
Run Code Online (Sandbox Code Playgroud)

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

Ond*_*cny 33

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

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

    openssl.exe pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将PEM格式的私钥转换为PVK格式:

    pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将PVK和SPC组合到PFX中:

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

  6. 将其从证书存储区导出为二进制CER格式CodeSign.cer.
  7. (可选)从Windows证书存储中删除证书.

如果您定期续订证书,则可以存储PVK文件并跳过步骤(2)和(3).

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

openssl crl2pkcs7 -nocrl -certfile CodeSign.crt -outform DER -out CodeSign.spc
Run Code Online (Sandbox Code Playgroud)

资料来源:

您需要的工具:

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

  • 明白了 - 这是假设有一个原始的pfx(已过期)开始,对吗?在我的情况下,我没有PFX - 这就是我想要达到的目的.我基本上在`pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk`中接收了你的指令但在我的情况下`CodeSign.pem`是`CodeSign.key`(据我所知只是一个PEM格式化的私钥,也可以很容易地命名为`CodeSign.pem`.谢谢你的帮助! (3认同)
  • 能够使用新的密钥文件完成说明(使用@ Ryan的方法,将.pem替换为.key文件) - 但证书实际上并没有用于创建强名称程序集,它说"无法提取公共密钥对中的密钥 - 密钥集不存在"(旧的.pfx文件可以正常工作). (2认同)
  • Ondrej Tucny的回答对我有用,只做了一次修改:我需要在第一步(openssl.exe)中添加"-nodes"参数.要转换为P12,请使用Firefox:工具,选项,高级,证书,查看证书,导入PFX,备份到P12. (2认同)

小智 11

您只能使用 openssl 创建 PFX。

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

    openssl pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
    Run Code Online (Sandbox Code Playgroud)
  2. 创建 PFX

    openssl pkcs7 -in CodeSign.spc -inform der -print_certs | openssl pkcs12 -export -inkey CodeSign.pem -out CodeSign.pfx
    Run Code Online (Sandbox Code Playgroud)


小智 9

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

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