微软在Windows 8下的SmartScreen过滤器是小型开发人员最可怕的噩梦。
虽然我认识到最终用户的好处以及阻止恶意程序在最终用户的计算机上安装自己的有效性,但我和许多其他开发人员宁愿不支付每年更新代码签名证书的费用,更糟糕的是,不支付EV代码签名证书的费用。此外,当为内部使用而开发的产品使用内部CA (存储在可信发布服务器商店中)的可信证书签名时,它们仍然是过滤器过度狂热行为的牺牲品。
开发人员和管理员过去可以通过在受信任的发布服务器存储中安装发布者代码签名证书来禁用警告和提示。创意开发人员可以在那里安装他们的自签名代码签名证书,当他们安装一个必要的签名和时间戳与付费的授权代码签名证书。在此之后,由发行者签名的程序将被信任,不会触发SmartScreen筛选器警报。从本质上说,一旦被信任,出版商就可以免收经常性费用。
最近对SmartScreen过滤器的更改(以及它在Windows 8中作为OS“特性”的包含)清楚地表明,微软希望您购买一个代码签名证书,而不是创造性地解决他们为您创建的问题。是否有人发现了一种新的方法来信任在默认情况下使用自签名代码签名证书的发布者(即,没有显示提示)?除了完全关闭过滤器之外,最终用户还能做些什么来让SmartScreen过滤器知道始终信任自签名证书?
请注意,购买代码签名证书并不是这个问题的答案。我正在寻找一种方法来告诉SmartScreen过滤器信任一个发布者,该发布者不从外部来源购买证书,而是发布自己的证书以供在其组织内使用。
更新:我想我可能已经找到了一个解决办法!从MSDN,SmartScreen过滤器可以被禁用在Windows8和Internet 10网站上列出的受信任的网站。如果有人能够验证此方法是否适用于从Windows 8中的可信站点下载和运行的安装程序,这将受到极大的赞赏,并将帮助许多ISV和内部开发团队。这也是回答这一问题所需的解决办法。可以通过组策略配置受信任的站点,因此从那里开始很简单。
以编程方式,可以通过将计算机的HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet设置\区域\2!2301或用户的HKCU\Software\Policies\Microsoft\Windows\CurrentVersion\Internet设置\2!2301设置为0来实现关闭受信任站点区域的SmartScreen筛选,并且可以按照这个问题中所示的方式将要信任的站点添加到受信任的站点区域。
请有人验证我在Windows 8上为从受信任的站点下载的未签名或自签名的可执行文件所建议的变通功能?我本人不使用Windows 8,因为我的操作系统升级预算花在了证书费上。
发布于 2013-05-20 21:47:33
使用微软Windows 8的90天试用版,我已经能够验证我的解决方案确实有效。如果您只想支付一次代码签名证书,而不是支付年费,这种方法也适用于您,但我无法保证。我的解决方案是每台机器,但应该很容易转换为每个用户的工作。
这是我的解决方案:
到目前为止,使用这种方法收到的最坏的警告是“这种类型的文件可能会损害您的计算机”。这就是典型的“你在下载一个可执行文件!”警告。它不会隐藏Run选项,也不会使用通过单击ClickOnce中的“发布”生成的引导网页出现在VS2010部署中。
感谢所有的评论和链接。
发布于 2013-05-01 22:42:42
引用MSDN网站
批评者可能会声称,SmartScreen正在“迫使”开发人员在证书上花钱。应该强调的是,在SmartScreen中建立或维护声誉不需要EV代码签名证书。使用标准代码签名证书签名的文件,甚至是未签名的文件,自去年在IE9中引入应用程序信誉以来,一直在建立声誉。然而,EV代码签名证书的存在有力地表明,该文件是由一个实体签名的,该实体已通过严格的验证过程,并使用硬件进行签名,这使得我们的系统能够比无符号或非EV代码签名程序更快地为该实体建立声誉。
换句话说,EV (付费)验证只是确定是否显示SmartScreen警告的大型算法中的一个因素。如果您有很多人下载您的程序,或者您的程序下载链接有一段时间没有更改,通过一些工作,您可以让您的程序而不是显示警告。此外,通过对代码进行数字签名,可以提高应用程序的声誉。这是直接从微软关于这个主题的网页发来的。
发布于 2016-08-04 23:47:32
我发现了一种非常简单的方法,即使没有管理员权限也可以绕过过滤器。你需要做的是:
@%*"SkipSmartScreen.bat" (是的,带有引号),保存在与应用程序相同的文件夹中。稍后可以重命名批处理文件。这将绕过智能屏幕过滤器。
在Windows 10 Home,Pro和Enterprise以及Windows 8 Pro上进行测试。
它的工作原理:
@ -这只是为了查看,它隐藏正在执行的命令的名称。%* -这将扩展到所有传递的命令行参数(例如,您在批处理文件中删除的文件)。https://stackoverflow.com/questions/15538925
复制相似问题