43

Windows 8 下的 Microsoft SmartScreen Filter 是小型开发人员最糟糕的噩梦。

虽然我意识到对最终用户的好处以及阻止恶意程序在最终用户的计算机上自行安装的有效性,但我和许多其他开发人员宁愿不支付每年更新代码签名证书的费用,或者更糟糕的是,EV代码签名证书。此外,当为内部使用而开发的产品使用来自内部 CA 的可信证书进行签名并存储在 Trusted Publishers 存储中时,它们仍然会成为过滤器过度热心行为的牺牲品。

开发人员和管理员过去可以通过在受信任的发布者商店中安装发布者的代码签名证书来禁用警告和提示。创意开发人员可以在安装使用付费 Authenticode 代码签名证书签名和时间戳的先决条件时在那里安装他们的自签名代码签名证书。之后,由发布者签名的程序将被信任,并且不会触发 SmartScreen 过滤器警报。从本质上讲,一旦受到信任,出版商就无需支付经常性费用。

最近对 SmartScreen 筛选器的更改(并将其作为 Windows 8 中的操作系统“功能”包含在内)清楚地表明,Microsoft 希望您购买代码签名证书,而不是创造性地解决他们为您创建的问题。是否有人发现了一种新方法来信任默认使用自签名代码签名证书的发布者(即不显示提示)?如果没有完全关闭过滤器,最终用户可以做些什么来让 SmartScreen 过滤器知道始终信任自签名证书?

请注意,购买代码签名证书并不能回答这个问题。我正在寻找一种方法来告诉 SmartScreen Filter 信任不从外部来源购买证书的发布者,而是发布自己的证书以供其组织内部使用。

更新:我想我可能已经找到了解决方法!MSDN中,可以在 Windows 8 和 Internet Explorer 10 上为列为受信任站点的站点禁用 SmartScreen 筛选器。如果有人可以验证此方法适用于从 Windows 8 中的受信任站点下载和运行的安装程序,那将不胜感激,并将帮助许多 ISV 和内部开发团队。这也是回答这个问题所需的解决方法。受信任的站点可以通过组策略进行配置,因此从那里开始很简单。

以编程方式,可以通过为机器设置 HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2!2301 或 HKCU\Software\Policies\Microsoft\Windows 来关闭受信任站点区域的 SmartScreen 过滤器\CurrentVersion\Internet Settings\Zones\2!2301 将用户设置为 0,并将要信任的站点添加到 Trusted Sites Zone 可以如本问题所示完成。

有人可以验证我建议的解决方法在 Windows 8 上是否适用于从受信任站点下载的未签名或自签名可执行文件?我自己并没有使用 Windows 8,而是将操作系统升级预算用于证书费用。

4

5 回答 5

23

引用MSDN 的网站

批评者可能会声称 SmartScreen 正在“强迫”开发人员花钱购买证书。应该强调的是,不需要 EV 代码签名证书来建立或维护 SmartScreen 的声誉。自去年在 IE9 中引入应用程序信誉以来,使用标准代码签名证书甚至未签名文件签名的文件继续建立声誉。但是,EV 代码签名证书的存在是一个强有力的指标,表明该文件是由已通过严格验证过程并使用硬件签名的实体签名的,这使我们的系统能够比未签名或未签名更快地为该实体建立声誉-EV 代码签名程序。

换句话说,EV(付费)验证只是决定是否显示 SmartScreen 警告的大型算法中的一个因素。如果你有很多人下载你的程序,或者如果你的程序下载链接有一段时间没有改变,通过一些工作你可以让你的程序显示警告。此外,通过对您的代码进行数字签名,您可以提高您的应用程序声誉。这直接来自微软关于该主题的网页

于 2013-05-01T22:42:42.727 回答
4

使用 Microsoft 提供的 90 天试用版 Windows 8,我已经能够验证我的解决方法确实有效。如果您想一次性支付一次代码签名证书而不是支付年费,这种方法也应该适用于您,但我无法做出任何保证。我的解决方案是每台机器,但应该很容易转换为每用户工作。

这是我的解决方案:

  1. 设置您自己的证书基础结构。
  2. 将根 CA 证书、根颁发的任何中间 CA 证书以及中间 CA 颁发的任何代码签名证书的副本作为 .cer 文件发布到您的网站。
  3. 在您的网站上安装由您的根 CA 颁发的 SSL 证书。
  4. 创建执行以下任务的安装程序/下载程序应用程序:
    • 将根 CA 证书(从您的网站,步骤 2)安装到最终用户计算机的受信任的根证书颁发机构存储中。
    • 通过将 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2!2301 设置为 0,禁用受信任站点 Internet 区域的 SmartScreen 筛选器。
    • 通过添加注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\yourdomain.com\yoursubdomain 将您的网站添加到区域地图。
    • 通过在上一步中创建的密钥中创建一个名为 https 的 DWORD 值 2,将您的域映射到受信任的站点区域。
  5. 从 Microsoft 受信任的根程序的成员处购买代码签名证书,最好是 EV 证书。
    • 在您购买之前,请确保 CA 为您的代码签名证书使用的证书和时间戳方案不会导致 OID 的 1.3.6.1.4.1.311.10.3.13 或 1.3.6.1.4.1.311.10.3.14,因为这些会使证书过期时签名过期,无论是否带有时间戳。
  6. 使用在第 5 步中购买的证书对您的下载程序/安装程序进行签名和时间戳。验证签名没有生命周期限制。如果一切正常,您可以将购买的代码签名证书放在安全的地方并将其锁定。
  7. 将您的下载器/安装程序发布到您的网站。使其成为您所有产品的先决条件下载。
  8. 从此时起,您可以使用由您自己的内部证书颁发机构颁发的代码签名证书(以及其他证书),而无需使用 SmartScreen 过滤器。

到目前为止,我使用这种方法收到的最糟糕的警告是“这种类型的文件可能会损害您的计算机”。这就是典型的“你正在下载一个可执行文件!” 警告。它不会隐藏“运行”选项,并且不会出现在使用通过单击 VS2010 中的“发布”生成的引导网页进行的 ClickOnce 部署中。

感谢所有评论和链接。

于 2013-05-20T21:47:33.683 回答
3

即使没有管理员权限,我也找到了一种非常简单的绕过过滤器的方法。你需要做的是:

  1. 打开记事本
  2. 键入以下行:@%*
  3. 将文件另存为"SkipSmartScreen.bat"(是的,带引号)在与您的应用程序相同的文件夹中。您可以稍后重命名批处理文件
  4. 要启动您的应用程序,请将您的 exe 拖到批处理文件中

这将绕过智能屏幕过滤​​器。

在 Windows 10 家庭版、专业版和企业版以及 Windows 8 专业版上测试。

这个怎么运作:

  • @- 这只是为了看起来,它隐藏了正在执行的命令的名称
  • %*- 这扩展到所有传递的命令行参数(例如,您在批处理文件中放置的文件
  • 整件事:它通过批处理文件执行文件,就好像它是批处理文件中的一行一样。出于某种原因,Windows 不对从批处理文件执行的文件进行任何检查。
于 2016-08-04T23:47:32.030 回答
1

以下是如何关闭 SmartScreen 的很好解释:
- Windows SmartScreen - 在 Windows 8 中打开或关闭
-取消选中文件夹选项中的选项

我用了什么,什么对我有用?这是第一个链接的“选项一”:

  1. 打开控制面板(图标视图),然后单击/点击操作中心图标。
  2. 在操作中心的左窗格中,单击/点击更改 Windows SmartScreen 设置链接。
  3. 如果UAC提示,则单击/点击Yes
  4. 选择(点)您希望 Windows SmartScreen 如何处理无法识别的程序的选项,然后单击/点击OK
    注意:默认选项是在从 Internet 运行无法识别的应用程序之前获得管理员批准
  5. 完成后,您可以根据需要关闭操作中心。

我希望这就是你要找的。:)

于 2015-10-09T07:49:44.970 回答
1

老问题,但我最近遇到了同样的问题,我需要将一个小的安装包下载到用户的电脑上供他们执行。但一如既往,SmartScreen 阻止了下载...

我发现的一种解决方法是将您的安装程序文件打包为 .zip(或类似文件),然后让用户下载此压缩文件并在其中执行安装程序。这至少是我必须在我的场景中使用的“最漂亮”的解决方案。

此方法使您免于将任何类型的证书分配给您的文件。您只需要您的用户信任您,但这将绕过 SmartScreen 过滤器。

我希望这可以用作解决您的问题的方法。

于 2020-09-23T12:40:47.193 回答