Windows 10 忽略我的设置文件中的验证码

Windows 10 ignores Authenticode on my setups files

在 Windows 10 的 "Fast Ring" 上,我自己的安装程序可执行文件出现了奇怪的行为:

我用 Authenticode 对他们进行 SHA-1 签名,多年来一直以同样的方式进行,从来没有遇到过任何问题。

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

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

...
Publisher: unknown
...

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

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

我用这样的方式签名:

SignTool.exe sign /v /t http://timestamp.verisign.com/scripts/timstamp.dll 
    /f "my-authenticode.pfx" /p "my-password" "my-setup.exe"

(为了便于阅读而添加了换行符)

我的问题:

是否有人知道这可能的原因(并解决)?

更多信息:

我能想到可能的原因:

更新一:

我发现了 a MSDN blog article back from 2013 that seems to talk about something similar,但我仍然看不出这是否真的适用。

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

也许 SmartScreen 会比较时间戳并针对较新的 signatures/setup 可执行文件表现不同?

也许我需要在调用SignTool.exe时添加additional/different参数?

更新二:

在非 Fast Ring Windows10 上, 显示 SmartScreen 警告。

此外,there is also a similar SO posting 对我没有进一步的帮助。

另外,there is a Symantec posting, that claims

For Windows Vista 64-bit and Windows 7 the signing process has changed. The code cannot simply be signed, it also needs to be "cross-signed" with a certificate provided by Microsoft.

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

他们进一步 link to their own instructions 仅讨论内核模式软件。

更新 3:

Microsoft TechNet 上的用户 me to "Windows Enforcement of Authenticode Code Signing and Timestamping”。

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

我发现我当前的证书是 SHA-1。我刚刚从 Thawte 重新发布它,将其更新为 SHA-2/SHA-256。

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

我不会购买 code signing cert from DigiCert,因为我相信证书链也会影响 SmartScreen 筛选器查看我的应用程序的方式。我希望它比我目前使用的 Thawte 证书有所改进。

如果您打算签署 Windows Vista,请注意 was a problem with SHA-256 signed files. The linked TechNet article talks about dual signing 可以解决这个问题。

更新四:

另请参阅 this SO answer,了解如何通过已签名的应用程序传递 SmartScreen 警告。

如果这个 DigiCert 证书加上等待获得足够的声誉仍然没有帮助,我可能不得不吞下苦药并购买 extended validation (EV) code signing certificate(它需要硬件令牌并且更贵)。

更新5:

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

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

我的认证 path/chain 现在看起来像这样:

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

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

更新 6:

文章“Do You Need SHA-2 Signed Root Certificates?”解释了为什么您不需要需要 SHA-256 根证书。

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

SmartScreen 筛选器只用了大约一天的时间就发现了它并且不再警告它。

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

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

自 2016 年以来被微软评为 , the reason for the error in my initial question was that I'm using SHA-1 only which is "deprecated"。

在我使用 SHA-1 和 SHA-256 设置可执行文件后 dual-signing(并等待几天),SmartScreen 过滤器不再抱怨。