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

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

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

开发人员和pipe理员曾经能够通过在受信任的发布者商店中安装发布者代码签名证书来禁用警告和提示。 创意开发者可以在安装有签名的前提条件并且用付费的Authenticode代码签名证书来安装他们的自签代码签名证书。 之后,由发布者签名的程序将被信任,并且不会触发SmartScreen筛选器警报。 从本质上讲,一旦被信任,出版商就免除了经常性费用。

SmartScreenfilter(以及它在Windows 8中作为OS“function”)的最新变化清楚地表明,Microsoft希望您购买代码签名证书,而不是创造性地解决他们为您创build的问题。 有没有人发现一种新方法来信任默认使用自签名代码签名证书的发布者(即不显示提示)? 在完全closuresfilter的情况下,最终用户可以通过什么方式让SmartScreen筛选器始终相信自签名证书?

请注意,购买代码签名证书不是这个问题的答案。 我正在寻找一种方法来让SmartScreen筛选器信任不从外部来源购买证书的发布商,而是在自己的组织内部发布自己的证书。

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

以编程方式closures“受信任的站点区域”的SmartScreen筛选器可以通过为机器或HKCU \ Software \ Policies \ Microsoft \ Windows设置HKLM \ Software \ Policies \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 2!2301来实现\ CurrentVersion \ Internet Settings \ Zones \ 2!2301将用户设置为0,然后将可信站点添加到受信任的站点区域, 如此问题所示。

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

从MSDN网站引用:

批评者可能会声称SmartScreen“迫使”开发者花钱在证书上。 应该强调的是,不需要使用EV代码签名证书来build立或维护使用SmartScreen的信誉。 从标准代码签名证书甚至未签名的文件签名的文件继续build立声誉,因为自去年在IE9中引入了应用声誉以来。 然而,EV代码签名证书的存在是一个强有力的指标,表明该文件是由一个通过了严格的validation过程并通过硬件签署的实体签署的,该硬件允许我们的系统比无签名或非签名更快地为该实体build立声誉-EV代码签名的程序。

换句话说,EV(付费)validation只是决定SmartScreen警告是否显示的大algorithm中的一个因素。 如果你有很多人下载你的程序,或者如果你的程序下载链接在一段时间内没有改变,有一些工作,你可以让你的程序不要显示警告。 另外,通过对您的代码进行数字签名,您可以提高您的Appication声誉。 这是微软在这个主题上的网页 。

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

这是我的解决scheme:

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

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

感谢所有的评论和链接。

即使没有pipe理员权限,我也find了一个非常简单的方法来绕过filter。 你需要做的是:

  1. 打开记事本
  2. 键入以下行: @%*
  3. 将文件保存为"SkipSmartScreen.bat" (是的,带引号)与您的应用程序位于同一文件夹中。 您可以稍后重命名该batch file
  4. 要启动您的应用程序,拖动您的EXE到batch file

这将会绕过smartscreenfilter。

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

怎么运行的:

  • @ – 这只是看起来,它隐藏了正在执行的命令的名称
  • %* – 这将扩展到所有传递的命令行参数(例如,您在batch file上放置的文件
  • 整件事情:它通过batch file执行文件,就好像它是batch file中的一行一样。 出于某种原因,Windows不会检查从batch file执行的文件。

下面是关于如何closuresSmartScreen的很好的解释:
– Windows SmartScreen – 在Windows 8中打开或closures
– 在文件夹选项中取消选中选项

我用了什么,对我有用吗? 从第一个环节是“选项一”:

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

我希望这是你正在寻找的。 🙂