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

Sha*_*ook 41 internet-explorer-9 windows-8 internet-explorer-10

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

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

开发人员和管理员曾经可以通过在受信任的发布者存储中安装发布者的代码签名证书来禁用警告和提示.创意开发人员可以在安装必要的签名时加安装自签名代码签名证书,并使用付费的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\Microsoft\Windows来关闭可信站点区域的SmartScreen筛选器\ CurrentVersion\Internet Settings\Zones\2!2301,用户为0,并将可信任站点添加到可信站点区域,如此问题所示.

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

Wil*_*iam 23

引用MSDN的网站:

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

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

  • 没有解决方法,我说了一些可以用来提高声誉的策略.当Windows 8刚出现时,我研究了这个三个小时,我自己也是一个业余开发人员.您可以使用所述策略在其服务中获得更高的声誉,但Microsoft不会提供解决方法.这是你能得到的最接近的. (9认同)
  • 从技术上讲,答案只是在回答问题时写的或说的.这是一个问题,对吗?:)当你问一个问题时,你可能并不总能得到你希望的答案.威廉的回答证实,没有单一的工作.(例如,做这件事,它会解决你的问题.)既然你知道这一点,你(可能)会停止寻找另一个答案.知道没有解决方法是一个有价值的答案. (6认同)
  • 我发现这个答案很有用,很高兴你没有删除它。 (2认同)

Sha*_*ook 5

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

\n\n

这是我的解决方案:

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

到目前为止,我使用此方法收到的最严重的警告是 \xe2\x80\x99c 这种类型的文件可能会损害您的计算机。\xe2\x80\x9d 这是典型的“您正在下载一个可执行文件!” 警告。它不会隐藏“运行”选项,并且对于使用在 VS2010 中单击 \xe2\x80\x9cPublish\xe2\x80\x9d 生成的引导网页的 ClickOnce 部署不会出现。

\n\n

感谢所有的评论和链接。

\n

  • 第5步还需要“花一大笔钱”。 (7认同)
  • 我会立即卸载任何干扰我系统安全设置的应用程序,并永远禁止该开发人员的任何和所有应用程序。 (4认同)