Whether/how 在代码签名时避免 SHA-1 签名时间戳?

Whether/how to avoid SHA-1 signed timestamp when code signing?

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

现在我注意到 使用 http://timestamp.comodoca.com/authenticode 时,时间戳证书仍然是 SHA-1 证书。 (详细信息:它是 df946a5... 主题 'CN=COMODO Time Stamping Signer,O=COMODO CA Limited,L=Salford, S=Greater Manchester,C=GB'。)

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

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

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

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

This article describes how to obtain a SHA-256 timestamp certificate, using the timestamp URL http://timestamp.globalsign.com/?signature=sha2. As an alternative, see this list of timestamp servers 你也可以用。

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)以及更高版本的操作系统(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

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

完成此操作后,检查可执行文件的安全属性,您应该会看到 SHA-1 和 SHA-256 签名(在更高版本的操作系统下),但只有 XP/VISTA 下的 SHA-1 签名.

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