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


Windows 10的“快速响铃”上,我在自己的安装可执行文件中遇到了一个奇怪的行为:

我是SHA-1,用同样的方式用Authenticode签约他们,从来没有遇到任何问题.

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

从我的网站下载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"

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

我的问题:

是否有人知道可能的原因(并修复)?

更多信息:

我可以想到可能的原因:

>使用Windows 10 Fast Ring进行签名是错误的. (我已使用相同的行为在Windows Server 2008 R2上签名).
>在Windows 10 Fast Ring中运行下载的安装程序可执行文件是错误的.

更新1:

我发现了a MSDN blog article back from 2013 that seems to talk about something similar,但我仍然无法确定这是否真的适用.

更奇怪的是:使用相同的Authenticode证书签名的旧网站下载不会触发警告.

也许SmartScreen会比较时间戳,并且对于较新的签名/设置可执行文件的行为会有所不同?

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

更新2:

在非快速环Windows 10上,不显示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:

用户GSerg pointed我在Microsoft TechNet上的“Windows Enforcement of Authenticode Code Signing and Timestamping”.

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

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

现在,我仍然在我的本地Windows 10 Fast Ring PC上收到SmartScreen警告,但至少它现在打印出版商.

《Windows 10忽略我的设置文件上的Authenticode》

我不会购买code signing cert from DigiCert,因为我相信证书链也会影响SmartScreen过滤器如何看待我的应用程序.我希望与我目前正在使用的Thawte证书相比,这是一项改进.

如果您打算签署Windows Vista,请注意was a problem with SHA-256 signed files.链接的TechNet文章谈到了dual signing以解决这个问题.

更新4:

另请参阅this SO answer,其中涉及将带有签名应用程序的SmartScreen警告传递.

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

更新5:

大约一会儿有一天,SmartScreen似乎不再显示任何警告.

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

《Windows 10忽略我的设置文件上的Authenticode》

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

《Windows 10忽略我的设置文件上的Authenticode》

对我来说有点奇怪的是根证书“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证书的费用.

最佳答案 作为
user GSerg pointed out,我最初的问题出错的原因是我自2016年起仅使用了SHA-1,这是微软的“
deprecated”.

使用SHA-1和SHA-256双重签名我的设置可执行文件(并等待几天)后,SmartScreen筛选器不再抱怨.

点赞