如何使SmartScreen筛选器信任自签名证书

时间:2013-03-21 03:24:57

标签: windows-8 internet-explorer-9 internet-explorer-10

微软在Windows 8下的SmartScreen Filter是一个小型开发者最糟糕的噩梦。

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

开发人员和管理员曾经可以通过在Trusted Publishers商店中安装发布商的代码签名证书来禁用警告和提示。创意开发人员可以在安装必要的签名时加安装自签名代码签名证书,并使用付费的Authenticode代码签名证书加盖时间戳。之后,发布者签署的程序将受到信任,并且不会触发SmartScreen筛选器警报。基本上,一旦信任,出版商就可以免除经常性费用。

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

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

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

以编程方式,可以通过为计算机设置HKLM \ Software \ Policies \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 2!2301或HKCU \ Software \ Policies \来关闭可信站点区域的SmartScreen筛选器用户的Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 2!2301为0,并且可以按照this question所示将要信任的站点添加到可信站点区域。

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

5 个答案:

答案 0 :(得分:23)

引用MSDN's website

  

批评者可能声称SmartScreen“迫使”开发人员花费   证书上的钱。应该强调EV代码签名   证书不需要建立或维护声誉   智能屏幕。使用标准代码签名证书和签名的文件   即使是未签名的文件也会继续建立声誉   应用声誉去年在IE9中引入。然而   存在EV代码签名证书是一个强有力的指标   该文件由经过严格验证的实体签署   过程并与硬件签署,允许我们的系统   比未签名或更快地建立该实体的声誉   非EV代码签署的程序。

换句话说,EV(付费)验证只是确定是否显示SmartScreen警告的大型算法中的一个因素。如果您有很多人下载您的程序,或者您的程序下载链接暂时没有更改,通过一些工作,您可以使您的程序显示警告。此外,通过对代码进行数字签名,您可以提高应用程序的声誉。这是直接来自Microsoft's webpage on the topic

答案 1 :(得分:3)

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

这是我的解决方案:

  1. 设置您自己的证书基础架构。
  2. 将根CA证书的副本,root发布的任何中间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且值为2的DWORD,将您的域映射到“受信任的站点”区域。
  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筛选器造成麻烦。
  9. 到目前为止,我使用此方法收到的最严重警告是“此类文件可能会损害您的计算机。”这是典型的“您正在下载可执行文件!”警告。它不会隐藏“运行”选项,也不会使用通过单击VS2010中的“发布”生成的引导网页来显示ClickOnce部署。

    感谢所有评论和链接。

答案 2 :(得分:3)

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

  1. 打开记事本
  2. 输入以下行:@%*
  3. 将文件保存为"SkipSmartScreen.bat"(是的,带引号)与应用程序位于同一文件夹中。您可以稍后重命名批处理文件
  4. 要启动您的应用,请将您的exe文件拖到批处理文件
  5. 这将绕过智能屏幕过滤​​器。

    在Windows 10 Home,Pro和Enterprise以及Windows 8 Pro上进行测试。

    工作原理:

    • @ - 这只是用于外观,它隐藏了正在执行的命令的名称
    • %* - 这会扩展到所有传递的命令行参数(例如,您在批处理文件中删除的文件
    • 整件事:它通过批处理文件执行文件,就好像它是批处理文件中的一行一样。出于某种原因,Windows不会对从批处理文件执行的文件进行任何检查。

答案 3 :(得分:1)

以下是关于如何关闭SmartScreen的详细说明:
- Windows SmartScreen - Turn On or Off in Windows 8
- Uncheck option in Folder Options

我用过什么,对我有用什么?从第一个链接开始是“选项一”:

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

答案 4 :(得分:1)

一个老问题,但是最近我遇到了同样的问题,我需要将一个小的安装包下载到用户的PC上,以便他们执行。 但是与往常一样,SmartScreen阻止了下载...

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

此方法可避免您为文件分配任何类型的证书。您只需要您的用户信任您,但这将绕过SmartScreen筛选器。

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