SHA-2 代码签名问题

SHA-2 代码签名问题

首先,这是我第一次代码签名

我买了Certum 的标准代码签名3年。

这是SHA-2基于:

SHA-2功能

这些都是正常的Windows 可执行文件;适用于最终用户,包括便携式用户和安装程序。

问题:

  1. 考虑到证书已于 2016 年 10 月 10 日颁发,即 2016 年 1 月 1 日之后颁发,这是否会以某种方式影响签名的行为?我代表阅读关于弃用SHA-1,例如:

    2016 年 1 月 1 日 - 包括 Internet Explorer 和 Chrome 在内的 Microsoft 产品将不再受信任SHA-1 代码签名证书(来源

  2. 我是否也应该加时间戳?这有什么好处?加时间戳有什么缺点吗?我发现这个并没有真正弄清楚事情:

    如果要长期使用签名(以证明文档作者或数据发起者的真实性),即超过一天或几天,则应该使用时间戳。(来源

  3. 假设我放弃对 XP 和 Vista 的支持,SHA-2代码签名在 Windows 7 上是否正常工作?我在 DigiCert 上看到SHA-2 代码签名对 Windows 7 的支持为部分:

    详细的操作系统兼容性:Windows 7 部分(来源

  4. 交叉签名存在严重问题SHA-2(特别是 SHA-256)和SHA-1。假设正如我所说,我将不再支持 WinXP 和 Vista,我需要这个吗?

答案1

考虑到证书已于 2016 年 10 月 10 日(即 2016 年 1 月 1 日之后)颁发,这会以某种方式影响签名的行为吗?我代表阅读有关弃用 SHA-1 的信息提出这个问题,例如:

不会。

我也应该加时间戳吗?这有什么用处?加时间戳有什么缺点吗?

时间戳是第三方证明签名确实是在特定时间做出的,而不仅仅是您将计算机时钟调慢的结果。

因此,时间戳的主要用途是证明签名是在证书过期之前进行的 - 或者更重要的是,在证书被撤销之前进行的。

例如,如果某人的私人签名密钥泄露,并且他们撤销了证书,这通常意味着全部用它制作的签名(过去和将来的)将失效。但是,带有时间戳的签名仍然有效,因为我们知道它们是在撤销之前制作的。

Windows Authenticode 中弃用 SHA-1 似乎也使用了时间戳,因此老的使用 SHA-1 签名的程序仍然会显示为正确签名,但在截止日期之后仍然不允许任何人“回溯”新签名。

由于有相当多的免费和公共时间戳机构,所以没有理由不这样做。

假设我放弃对 XP 和 Vista 的支持,SHA-2 代码签名能在 Windows 7 上正常工作吗?

交叉签名 SHA-2(尤其是 SHA-256)和 SHA-1 存在严重问题。假设我不再支持 WinXP 和 Vista,我需要这个吗?

首先要注意的是,SHA-1/SHA-2 涉及一些位置——当颁发 CA 签署你的证书时,它会被单独使用,当你签署实际的可执行文件时(甚至当时间戳机构反签时你的我们可以使用签名 (signature) 来构造一个链,每个签名都有自己的哈希值。

证书上的签名和可执行文件上的签名也可能由不同的代码进行验证,并且一个可能支持 SHA-2,而另一个则不支持。

因此实际情况是 Windows XP SP3 完全支持使用 SHA-2 签名的证书,只是不支持可执行文件使用 SHA-2 签名。这在知识库 968730, 还这篇 TechNet 帖子

然而,在 Authenticode 中,可以向同一个可执行文件添加多个签名(又名双重签名或嵌套签名),因此您可以为旧系统使用基于 SHA-1 的签名,为新系统使用基于 SHA-2 的签名。

使用osslsigncode,您可以先使用 制作 SHA-1 签名-h sha1,然后使用 再次运行它以-nest -h sha256添加 SHA-2 签名。使用signtool sign /as /fd sha256 /td sha256(附加签名)同样有效。例如,每晚 PuTTY 构建尽管使用 SHA-256 签名的证书,但它们都是双重签名的,并且可以在所有 Windows 版本上运行。

(这里我不计算 XP SP2 和更早的版本,因为,嗯。)

相关内容