在
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警告,但至少它现在打印出版商.
我不会购买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测试.
我的认证路径/链现在看起来像这样:
对我来说有点奇怪的是根证书“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筛选器不再抱怨.