Windows 10 忽略我的设置文件中的 Authenticode

Uwe*_*eim 5 windows sha authenticode windows-10

在 Windows 10 的“快速环”上,我在自己的安装可执行文件上出现了奇怪的行为:

多年来,我一直使用Authenticode对它们进行 SHA-1 签名,而且从未遇到任何问题。

最近 Windows 10 无法识别我的(有效)签名。

当从我的网站下载 setup.exe 并执行它时,Windows SmartScreen 消息框出现并告诉我:

...
发布者:未知
...

查看刚刚下载的安装可执行文件的属性时,它会显示签名,并告诉我签名有效。

此外,整个证书链都是有效的。

我用这样的东西签名:

SignTool.exe sign /v /t http://timestamp.verisign.com/scripts/timstamp.dll 
    /f "my-authenticode.pfx" /p "my-password" "my-setup.exe"
Run Code Online (Sandbox Code Playgroud)

(为了可读性添加了换行符)

我的问题:

有没有人知道可能的原因(和修复)?

更多信息

我能想到可能的原因:

  • 使用 Windows 10 Fast Ring 签名是有问题的。(我已经使用相同的行为在 Windows Server 2008 R2 上签名)。
  • 在 Windows 10 Fast Ring 中运行下载的安装可执行文件是有问题的。

更新 1:

我发现了 2013 年的 MSDN 博客文章,它似乎谈论了我发现的类似内容,但我仍然看不出这是否真的适用。

更奇怪的是:从我们网站上下载的旧版本,使用相同的 Authenticode 证书签名不会触发警告。

也许 SmartScreen 会比较时间戳并对较新的签名/安装可执行文件有不同的行为?

也许我需要在调用 SignTool.exe 时添加其他/不同的参数?

更新 2:

在非 Fast Ring Windows 10 上,不会显示SmartScreen 警告。

此外,还有一个类似的 SO 帖子并没有进一步帮助我。

另外,还有一个赛门铁克的帖子,声称

对于 Windows Vista 64 位和 Windows 7,签名过程已更改。代码不能简单地签名,还需要与微软提供的证书进行“交叉签名”。

这对我来说很奇怪,因为我的签名程序直到最近才成功运行。

他们进一步链接到他们自己的说明这些说明只讨论内核模式软件。

更新 3:

用户GSerg向我指出了Microsoft TechNet 上的“ Windows Enforcement of Authenticode Code Signing and Timestamping ”。

这似乎朝着正确的方向发展。

我已经看到我当前的证书是 SHA-1。我刚刚通过从 Thawte 重新发布它,将其更新为 SHA-2/SHA-256。

现在,我仍然在本地 Windows 10 Fast Ring PC 上收到 SmartScreen 警告,但至少现在它会打印发布者。

在此处输入图片说明

我不会从 DigiCert购买代码签名证书因为我相信证书链也会影响 SmartScreen 过滤器如何查看我的应用程序。我确实希望它与我目前使用的 Thawte 证书相比有所改进。

如果您打算为 Windows Vista 签名,请注意SHA-256 签名文件存在问题。链接的 TechNet 文章讨论了双重签名以克服此问题。

更新 4:

另请参阅有关通过签名应用程序传递 SmartScreen 警告的SO 答案

如果这个 DigiCert 证书加上等待获得足够的声誉仍然没有帮助,我可能不得不吞下苦果并购买扩展验证 (EV) 代码签名证书(它需要硬件令牌并且更贵)。

更新 5:

大约之后 有一天,SmartScreen 似乎不再显示任何警告。

似乎我现在的双重签名安装可执行文件(SHA-1 加 SHA-256)已经获得了足够的声誉来成功通过 SmartScreen 测试。

在此处输入图片说明

我的认证路径/链现在看起来像这样:

在此处输入图片说明

我觉得有点奇怪的是,根证书“thawte”仍然使用 SHA-1。

我原以为这仍然会引起 SmartScreen 的担忧,但似乎没有。

更新 6:

文章“你需要SHA-2签名根证书? ”解释你为什么需要一个SHA-256根证书。

与此同时,我还从 DigiCert 收到了我的 Authenticode 证书。我已经在一些设置中使用它。

仅用了大约一天的时间,SmartScreen 过滤器就发现了它并且不再发出警告。

所以我现在有一个 Thawte Authenticode 代码签名证书和一个 DigiCert Authenticode 代码签名证书。

如果我早点理解 SHA-256 的含义,我本可以为 DigiCert 证书省钱。

Uwe*_*eim 2

正如用户 GSerg 指出的那样,我最初的问题中出现错误的原因是我仅使用 SHA-1,该算法自 2016 年以来已被 Microsoft“弃用”。

使用 SHA-1 和 SHA-256 对我的安装可执行文件进行双重签名(并等待几天)后,SmartScreen 过滤器不再抱怨。