代码签名时是否/如何避免SHA-1签名时间戳?

时间:2015-06-03 11:06:09

标签: code-signing sha1 sha2 trusted-timestamp timestamping

我们刚刚从SHA-1切换到SHA-2代码签名证书。 (作为背景信息,我们使用COMODO代码签名证书在Windows上使用signtool.exe签署.exe和.xap文件。)我们使用经过认证的时间戳来执行此操作,以确保Windows在代码签名证书后始终信任代码签名到期。

现在,当使用http://timestamp.comodoca.com/authenticode时,我注意到时间戳证书仍然是SHA-1证书。 (详情:df946a5 ...主题'CN = COMODO时间戳签名者,O = COMODO CA Limited,L = Salford,S =大曼彻斯特,C = GB'。)

(在Windows上,可以通过签名.exe查看证书,然后在其“资源管理器属性”对话框中转到“数字签名”选项卡,选择签名并单击“详细信息”,然后在“数字签名详细信息”对话框中单击计数器签名,单击“详细信息”,然后在“第二个数字签名详细信息”对话框中单击“查看证书”。如果“签名哈希算法”为“sha1”,则证书为SHA-1证书。)

这会是一个问题吗?换句话说,在我们当前的代码签名证书过期之后,以及Microsoft Windows将SHA-1视为一个损坏的算法(最迟在2020年)之后,我们目前的签名是否仍然值得信赖?或者Windows会说:“时间戳在代码签名证书的有效范围内,但时间戳是用SHA-1证书签名的,所以我不相信时间戳,因此我不相信这个签名”?

我们可以/应该使用其他服务吗? (不是Verisign的http://timestamp.verisign.com/scripts/timstamp.dll,因为他们还使用SHA-1时间戳证书,即6543992 ......)

2 个答案:

答案 0 :(得分:1)

更新:在1/1/2017之前,您似乎还可以。

可能,但感谢this文章,我发现了如何获取SHA-256时间戳证书。我只找到一个可以执行此操作的时间戳服务器:http://timestamp.globalsign.com/?signature=sha2

signtool / td标志也很重要(并且记录不完整)。

签名如下:

signtool sign /fd SHA256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 /a filename.exe

使用SHA-256签名哈希算法生成带有代码签名证书和时间戳证书的可执行文件。

答案 1 :(得分:1)

您可以使用SHA-2证书对代码进行双重签名,以便在XPsp3和Vista(不了解SHA-2)以及更高版本的操作系统(Win 7,8,10)下进行验证。

这是一个两步过程,首先使用SHA-1进行签名,然后附加SHA-256签名。虽然它不明确,但第一次运行signtool默认为SHA-1签名。在第二次运行中,您使用/ fd选项请求sha256摘要算法。这个例子中的时间服务器是Comodo的。

signtool sign /f cert.pfx /p your_cert_password /t "http://timestamp.comodoca.com" /v file_to_sign.exe

signtool sign /f cert.pfx /p your_cert_pass /fd sha256 /tr "http://timestamp.comodoca.com/?td=sha256" /td sha 256 /as /v file_to_sign.exe

您需要使用支持双重签名的signtool版本(/ as选项)。我相信这是Windows SDK 8.1或更高版本。

执行此操作后,请检查可执行文件的安全属性,您应该看到SHA-1和SHA-256签名(在以后的操作系统下),但只能看到XP / VISTA下的SHA-1签名。

请注意,其他时间服务器具有不同的选项来指定摘要算法。您的颁发CA应该能够提供相应的URL。