SHA-2 代码签名问题

Lin*_*eak 3 windows-7 code-signing windows-8 sha-2 windows-10

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

从 Certum购买了 3 年的标准代码签名

它基于SHA-2

SHA-2功能保护

它们都是普通的Windows 可执行文件;适用于最终用户,包括便携式和安装人员。

问题:

  1. 请记住,证书已于 2016 年 10 月 10 日颁发,即在 2016 年 1 月 1 日之后,这是否会以某种方式影响签名的行为?我代表阅读弃用SHA-1提出这个问题,例如:

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

  2. 我也应该加时间戳吗?这有什么用?时间戳有什么缺点吗?我发现了这一点,这并没有真正解决问题:

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

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

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

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

use*_*686 7

请记住,证书已于 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 签署您的证书时以及在您签署实际可执行文件时(甚至在时间戳机构对您的签名进行反签名时)单独使用。换句话说,有一个签名链,每个签名都有自己的哈希值。

证书上的签名也可能由与可执行文件上的签名不同的代码验证,一个可以支持 SHA-2,而另一个仍然不支持。

所以实际情况是 Windows XP SP3 完全支持使用 SHA-2 签名的证书,它只是不支持使用 SHA-2 签名的可执行文件。这在KB 968730以及这篇 TechNet 帖子中有所提及。

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

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

(我没有在这里计算 XP SP2 及更早的版本,因为,好吧。)