我正在为我的可执行文件应用数字签名。在Windows XP或Windows Vista上使用signtool
:
>signtool.exe sign /f "avatar.pfx" MyApp.exe
自动将整个认证链包含在数字签名中。
从Windows 7开始,整个认证链is no longer included。 You must manually include the certificate那个:
signtool
实用程序的 i am told that i have to do this using the /ac
switch。
来自MSDN documentation of signtool
:
/ ac FileName
指定包含要添加到签名块的其他证书的文件。
如何获取签署证书的证书的文件名?
这更令人困惑,因为我没有任何此类文件。我有我的数字签名可执行文件,没有嵌入式认证链:
Stackoverflow用户davidcl had the same question。在这个self-answered answer中,他说我需要
使用包含根证书,中间证书,开发人员证书和私钥的PFX文件进行签名 在创建了适当的PFX文件之后 - 这本身就是一个奥德赛......
但他没有说明他是如何创建包含整个认证链的PFX的。
答案 0 :(得分:7)
安装OpenSSL for Windows。完成后,您的系统上就会有openssl.exe
可执行文件。
现在进行如下操作。
openssl pkcs12 -in avatar.pfx -out avatar.pem -nodes
(您需要在此输入.pfx密码)
openssl pkcs12 -in avatar.pfx -out mycert.pem -nodes -clcerts
(再次是PW)
openssl x509 -in mycert.pem -out mycert.cer -outform DER
现在打开您的资源管理器并双击mycert.cer。查看详细信息,并在某处讨论发行人。这是发行密钥库的公司,您的下一个目标是获得他们的中间证书和最终的根证书。如果幸运的话,您的证书中会有一个名为“授权信息访问”的扩展名,用于告知您何处直接获得颁发证书。如果您不是那么幸运,那么您将在“授权信息访问”中找到OCSP访问的URL,或者在“CRL分发点”扩展中找到CRL的URL。这些至少应该让你对供应商的“主页”有一个模糊的概念。如有疑问,只需谷歌,或再次问我:)
如果您在供应商的页面上,则必须注意“CA证书”或“中间证书”。您需要下载名称与您在自己的证书的“颁发者”字段中找到的名称完全相同的名称。
现在有趣的部分:您刚刚找到的证书将再次具有“发行人”字段。幸运的是,如果发行人是同一家公司(通常是大型CA如VeriSign的情况),那么您将在当前所在的同一站点上找到相应的证书。如果没有,请重复之前的步骤。
重复这个繁琐的程序,直到找到证书的“主题”字段与其“发行人”字段完全相同的位置。那你就完成了。这是一个所谓的“自签名根证书”。
这些证书大多数都是“DER”/“ASN.1”/“X.509”格式 - 如果您有选择,请下载“PEM”格式,否则您首先需要将证书转换为“ PEM“格式由
openssl x509 -in cert.der -inform DER -out cert.pem
获得PEM格式的所有遗失证书
在文本编辑器中打开步骤1中创建的初始文件avatar.pem。
在单独的窗口中打开缺少的证书PEM文件
复制丢失的证书(整个文件,包括“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”)并追加它们到avatar.pem
保存结果
问题
openssl pkcs12 -export -in avatar.pem -out newavatar.pfx -name“”
您必须输入要与新文件一起使用的新密码。
答案 1 :(得分:1)
以上Ian评论的次要补遗"最后,我有了一个更容易获得.cer的方式......"。现在,当您从Thawte网页导出代码签名pfx时,您可以指定您希望包含整个链。因此,您可以使用certmgr.msc导入pfx,然后将单个Thawte中间证书导出为codesign.cer文件。然后使用signtool / ac开关。无需使用旧的签名应用程序。请务必删除商店中的临时证书,以便对新签名的应用程序进行测试。 - 威廉·克罗夫特