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



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

现在我注意到,当使用http://timestamp.comodoca.com/authenticode时,时间戳证书仍然是SHA-1证书。(详细信息:它是df946a5…主题为'CN=COMODO时间戳签名者,O=COMODO CA Limited,L=Salford, S=Greater Manchester,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…)

自2017年1月1日起,您不能再在Windows 7及更高版本(如果时间戳在2016年1月1日之后)上使用SHA-1。

本文描述了如何使用时间戳URL http://timestamp.globalsign.com/?signature=sha2获取SHA-256时间戳证书。作为一种替代方法,请参阅您也可以使用的时间戳服务器列表。

signtool /td标志也很重要(但文档很少)。

像这样签名:

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

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

您可以使用SHA-2证书对代码进行双签名,以便在XPsp3和Vista(不理解SHA-2)以及以后的操作系统(win7, 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。

相关内容

  • 没有找到相关文章

最新更新