如何使用我的证书链创建PFX文件?

9

我正在给我的可执行文件应用数字签名。在Windows XP或Windows Vista上使用signtool

>signtool.exe sign /f "avatar.pfx" MyApp.exe

自动将整个认证链包含在数字签名中。

从Windows 7开始,整个认证链不再 自动 包含您必须手动包含证书,其中包括:

  • 签署您的密钥的证书
  • 签署签署您的密钥的证书的证书
  • ...
  • ...直到没有更多需要包含的证书为止

我被告知必须使用/ac开关signtool实用程序一起执行此操作。

来自MSDN signtool文档:

/ac FileName
指定包含要添加到签名块中的其他证书的文件。

如何获取签署我的证书的证书文件名?

这更加令人困惑,因为我没有这样的文件。我有一个未嵌入认证链的数字签名可执行文件:

enter image description here


Stackoverflow用户davidcl有同样的问题。在这个自问自答的答案中,他说我需要使用包含根证书、中间证书、开发者证书和私钥的PFX文件进行签名。
创建适当的PFX文件后 - 这本身就是一次艰苦的过程...

但他没有说明如何创建包含整个认证链的PFX。


另请参阅


我可以用OpenSSL给您提供一个描述,这样可以吗? - emboss
如果这是一个有用的比喻 - 当然可以。 - Ian Boyd
我有一个仅包含我们的证书和私钥的PFX文件。a) 将证书转换为SPC(软件发布证书):>cert2spc.exe Avatar.cer Avatar.spc b) 将SPC和私钥(pvk)合并到PFX中:>pvk2pfx.exe -pvk Avatar.pvk -spc Avatar.spc -pfx Avatar.pfx - Ian Boyd
我有点困惑 - 这是否意味着它解决了你的问题? - emboss
啊,好的,不是。实际上这个描述恰好适用于在您的 PFX 中只有一个证书的情况。 - emboss
显示剩余2条评论
2个回答

7

安装 Windows版的OpenSSL。 安装完成后,您会在系统某个地方找到openssl.exe可执行文件。

现在按照以下步骤进行操作。

  1. openssl pkcs12 -in avatar.pfx -out avatar.pem -nodes

(您需要在此处输入.pfx密码)

  1. openssl pkcs12 -in avatar.pfx -out mycert.pem -nodes -clcerts

(再次输入密码)

  1. openssl x509 -in mycert.pem -out mycert.cer -outform DER

现在打开资源管理器并双击mycert.cer。查看详细信息,其中将提到发行者。这是颁发您密钥库的公司,您的下一个目标是获取它们的中间证书和最终根证书。如果您很幸运,在证书中有一个名为“Authority Information Access”的扩展,告诉您直接获取颁发证书的位置。如果不够幸运,则扩展“CRL Distribution Points”中有OCSP访问的URL或CRL的URL。这些应该至少给您一个关于供应商“主页”的大致想法。如有疑问,请谷歌搜索或再次询问我 :)

如果您在供应商的页面上,您需要注意“CA证书”或“中间证书”。您需要下载与您自己证书中“Issuer”字段完全相同的证书。

现在有趣的部分:您刚找到的证书又将具有“Issuer”字段。如果发行者是同一家公司(通常是VeriSign等大型CA的情况),则您会在当前所在站点上找到相应的证书。如果没有,则重复之前的步骤。

重复这个繁琐的过程,直到找到一个证书,其“Subject”字段与其“Issuer”字段完全相同。然后您就完成了。这是所谓的“自签名根证书”。

这些证书中大多数都是以“DER”/“ASN.1”/“X.509”格式提供的-如果有选择,请下载“PEM”格式,否则您需要首先通过以下方式将证书转换为“PEM”格式:

openssl x509 -in cert.der -inform DER -out cert.pem

一旦您获得了所有缺失的PEM格式证书

  1. 在文本编辑器中打开步骤1创建的初始文件avatar.pem。

  2. 在单独的窗口中打开缺失的证书PEM文件。

  3. 复制缺失的证书(整个文件,包括"----- BEGIN CERTIFICATE -----"和"----- END CERTIFICATE -----"),并将其附加到avatar.pem。

  4. 保存结果。

  5. 发出命令:

openssl pkcs12 -export -in avatar.pem -out newavatar.pfx -name ""

您需要输入新密码以与新文件一起使用。


2
最后我找到了一种更简单的方法来获取签署我的证书的证书的 .cer 文件。我得到了一个在 Windows Vista 上签名的应用程序的版本,在那里查看了应用程序的数字签名,并能够查看并导入该证书到我的证书存储中。然后我就能将其导出为 .cer 文件并从存储中删除它。但是我认为,当我无法访问在 XP 或 Vista 上签名的应用程序版本时,这个答案同样适用。 - Ian Boyd
1
@Ian:我懂了,Windows证书存储会为你完成证书链。不错的方法,我没有想到过。我曾经在Linux系统上做了完全相同的流程,没有这样的帮助 :) - emboss
我本来没有中间证书。但是通过挖掘旧的已签名可执行文件,我能够"钓出"证书并将其保存到硬盘中。一旦有了证书,我就可以使用signtool/ac开关,在签名中包含签名证书。 - Ian Boyd

1

对于Ian上面评论的小补充"In the end I had a much easier way to get a .cer..."。现在,当您从Thawte网页导出您的代码签名pfx时,您可以指定要包含整个证书链。因此,您可以使用certmgr.msc导入pfx,然后将单个的Thawte中间证书导出为codesign.cer文件。然后使用signtool /ac开关。无需拥有旧的签名应用程序。确保删除存储器中的临时证书,以便您测试新签名的应用程序有效。--William Croft


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接