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"
(为了便于阅读而添加了换行符)
我的问题:
是否有人知道这可能的原因(并解决)?
更多信息:
我能想到可能的原因:
用 Windows 10 Fast Ring 签名是有问题的。 (我已经以相同的行为登录 Windows Server 2008 R2)。
- 运行 Windows 10 Fast Ring 中下载的安装程序可执行文件有问题。
更新一:
我发现了 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 过滤器不再抱怨。
在 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"
(为了便于阅读而添加了换行符)
我的问题:
是否有人知道这可能的原因(并解决)?
更多信息:
我能想到可能的原因:
用 Windows 10 Fast Ring 签名是有问题的。 (我已经以相同的行为登录 Windows Server 2008 R2)。- 运行 Windows 10 Fast Ring 中下载的安装程序可执行文件有问题。
更新一:
我发现了 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 上的用户
这似乎是朝着正确的方向发展。
我发现我当前的证书是 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 年以来被微软评为
在我使用 SHA-1 和 SHA-256 设置可执行文件后 dual-signing(并等待几天),SmartScreen 过滤器不再抱怨。