25
4

6 回答 6

40

最后,我设法找出了一个可行的程序。以下是从 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. 将其从证书存储导出为二进制 CER 格式为CodeSign.cer.
  7. (可选)从 Windows 证书存储中删除证书。

如果您定期更新您的证书,您可以存储 PVK 文件并跳过步骤 (2) 和 (3)。

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

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

资料来源:

您将需要的工具:

  • OpenSSL
  • pvk.exe— 请参阅该页面底部的下载链接(原始位置可能无法访问;在这种情况下,请参阅本文,其中包含指向镜像站点的链接或此处的其他直接下载链接
  • pvk2pfx.exe— Microsoft SDK 的一部分,随 Visual Studio 2010 一起安装
于 2011-03-24T15:20:04.440 回答
14

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

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

于 2018-10-01T17:42:32.853 回答
11

您只能使用 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
于 2018-09-18T12:40:40.373 回答
3

当前的答案帖子在使用 GoDaddy 从过期证书文件(.pfx 或 .p12)移动到新文件的最后步骤中对我非常有帮助,但我发现它缺少有关如何生成证书的初始步骤的信息来自我的原始证书文件的签名请求 (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 错误 0x80070490 - 找不到与密钥匹配的证书

于 2012-03-02T01:07:23.510 回答
2

对于仍在寻找如何做到这一点的答案的任何人,我只是花了一天时间弄清楚这一点,并且不得不做这篇文章中列出的各种事情。如果您在 Windows 上使用 git-bash,我必须winpty使用 openssl 添加到所有调用的开头,否则它会卡在空白中。伪步骤如下:

  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 下载 Zip 并提取 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
于 2020-11-10T15:17:52.547 回答
-1

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

然后您可以从这里导出到 PFX 文件

于 2015-09-23T05:09:45.133 回答