如何避免"Windows Defender SmartScreen阻止了未被识别的应用程序启动警告"?

136
我的公司通过我们的网站向客户分发安装程序。最近,当我通过网站下载并尝试运行安装程序时,我收到了警告消息:
Windows保护了您的PC Windows Defender SmartScreen阻止了一个未被识别的应用程序启动。运行此应用程序可能会使您的PC处于风险之中。
如果我右键单击安装程序并选择“属性”,我注意到以下内容:

Enter image description here

我们的安装程序已经签名。

如何查找Windows Defender SmartScreen警告的原因?

我没有找到Windows Defender的日志文件,也没有在事件查看器中找到任何信息。


3
问题似乎在于我们正在使用“标准代码签名证书”进行签名。如果我们使用“扩展验证(EV)代码签名证书”进行签名,就无需通过许多用户安装我们的软件来建立信任。相反,证书颁发机构会进行审查过程,确保我们是一个合法的公司。我怀疑最近Windows 10更新中有政策变化。无论如何,能够阅读Windows Defender日志将非常有用。下次问题可能是其他原因,而找出问题所在很麻烦。 - Andy
3
EV代码签名证书需要什么样的费用?你查过了吗?不想太离谱,谁觉得这像个骗局?我们现在是“基于信任”的,除非你深入钱包,不然就不能再信任。如果普通证书没有建立信任,那么开销就很奇怪了。它们至少能被视为“防篡改”的吗?可能可以看看我在Virustotal下面的评论。 - Stein Åsmul
3
每年$410与$289的比较,我认为几乎是相当公平的。他们似乎做了一些额外的工作,如通过电话联系公司,在官方登记簿中查找公司等。是的,普通证书保证了安装程序没有被篡改。 - Andy
2
谢谢提供的信息。听起来就像是15年前获取普通证书时他们所做的事情?当时我们也需要提供相当多的信息,但我猜事情已经退化了 - 价格似乎还停留在那个时候。事物变化越多,它们越保持不变 - 只是名字改变了而已?那么,在使用这样的EV证书之前是否需要进行强制性的恶意软件检查呢?我的意思是,如果他们关注的是“信任”和“声誉”,而不仅仅是纯粹的防篡改 - 那将是更好的要求,而不仅仅是检查公司是否存在。你觉得呢?签名恶意软件 - 不太好。 - Stein Åsmul
1
另请参见https://dev59.com/CVkS5IYBdhLWcg3wzZXB - emkey08
显示剩余3条评论
4个回答

130

简短总结

如果您的应用程序在Microsoft SmartScreen中没有足够的声誉,将显示此警告。为了获得声誉,您可以选择以下方式之一:

  • 向Microsoft提交您的应用程序进行恶意软件分析
  • 购买“扩展验证”(EV)代码签名证书
  • 购买“组织验证”(OV)代码签名证书
  • 耐心等待很长时间

请继续阅读以了解有关这些不同选项的详细信息。

选项1:向Microsoft提交您的应用程序进行恶意软件分析

Microsoft允许软件开发人员提交文件进行恶意软件分析。根据Microsoft的说法,这将帮助开发人员“验证其产品的检测”。如果审核成功,Microsoft SmartScreen的警告将会更快消失,甚至有时会立即消失(对于我自己的一个应用程序来说,它立即生效)。您需要拥有Microsoft账户才能提交应用程序进行审核。

然而,请注意,如果您发布应用的更新版本,那么您还将需要再次请求新的审核。为了解决这个问题,您要么需要使用“扩展验证”或“组织验证”的代码签名证书(详见下文)。

选项2:购买“扩展验证”(EV)代码签名证书

立即和永久地消除Microsoft SmartScreen警告的一种保证方式是从Microsoft批准的证书颁发机构之一购买“扩展验证”(EV)代码签名证书,并使用该EV证书对应用进行签名

这样的EV证书每年会花费您大约250至700美元(最好比较价格),并且只会发给注册的企业。如果您是一名独立开发者,您必须是独资经营者,并拥有有效的营业执照。您可以在EV Code Signing Certificate Guidelines中了解更多关于EV代码签名证书的正式要求。
EV证书必须存储在安全的物理硬件令牌或HSM(硬件安全模块)上。您的CA将为您处理此事。
选项3:购买“组织验证”(OV)代码签名证书
你还可以购买更便宜的“组织验证”(OV)代码签名证书(也称为“标准”或“非EV”证书),并使用该证书签署您的应用程序。这也将使微软SmartScreen警告永久消失,但不是立即消失。OV证书每年需要花费100至500美元(再次强调,最好比较价格),并且也可以发给没有有效营业执照的个人开发者。一些CA机构还为开源项目提供折扣。
自2023年6月起,新发行(或续订)的OV证书必须存储在安全的物理硬件令牌或HSM(硬件安全模块)上。您的CA机构将为您处理此事。不再可能将OV证书存储在您自己的计算机上。

没有即时解决方案

OV代码签名证书的问题在于它们不能立即消除微软SmartScreen的警告。相反,需要一些时间让您的证书建立声誉,然后警告才会消失。然而,一旦您的证书建立了足够的声誉,使用该证书签名的所有应用程序都将被微软SmartScreen永久信任,不再触发警告。

需要多长时间?

那么,使用OV代码签名证书时,Microsoft SmartScreen警告会在多长时间内消失?不幸的是,这很难回答,因为微软本身拒绝公布任何相关细节。根据一些非官方统计数据(见下文),通常需要2到8周左右才能永久消除警告。似乎确切的持续时间还取决于您的应用程序所下载的网站声誉。

非官方的统计数据如下:

18天左右,大约安装了430个应用。来源:我自己的证书之一(2022年12月)
42天左右,大约安装了1,400个应用。来源:我自己的证书之一(2021年2月)
16天左右,大约安装了2,000个应用。来源:我自己的证书之一(2020年5月)
一个月以上,下载量超过10,000次。来源:这里(2020年1月)
几周到一个月之间。来源:这里(2019年12月)
大约2-3周。来源:这里(2019年12月)
大约有3,000次下载。来源:这里(2013年12月)

证书更换的问题

当您的旧证书过期并开始使用新证书签署代码时,就会发生证书更换。

购买具有最长有效期的OV代码签名证书是一个好主意,因为当您更新证书时,声誉将不幸地不会自动转移到新证书(即使该新证书与旧证书使用相同的私钥进行签名)。

然而,您可以通过在旧证书过期之前获取新的代码签名证书,并使用旧(但尚未过期!)和新证书同时签名代码来减轻更换问题,从而产生两个签名。旧证书的签名将继续绕过SmartScreen,并且同时,新签名将帮助新证书建立信任。因此,新证书在旧证书过期之前获得信任是一个好主意。

如果您的旧证书已经过期,那么您仍然可以将新证书的签名添加到一个已发布的版本的应用程序中,然后重新发布该应用程序版本作为双重签名应用程序。与以前一样,这也将帮助新证书建立信任。

要正确地为您的应用程序进行双重签名,首先使用旧证书对代码进行签名,然后再使用新证书进行签名。使用Microsoft's SignTool/as命令行选项,在第一个签名上附加一个额外的签名(而不是替换它)。
选项4:只需等待很长时间
如果您不采取任何措施,Microsoft SmartScreen警告最终也会消失。但这可能需要很长时间(几个月)和/或下载量(数万次)。另一个大问题是,每次发布应用程序的更新版本时,等待期都会重新开始。所以,这可能不是您正在寻找的解决方案。

5
可以证实,选项1在24小时内消除了警告。 - Ado Ren
1
总的来说,这是一个非常好的选项摘要,确实非常有用!然而,将应用程序提交到应用商店(选项4)并不能解决问题。当在Windows安全控制台中打开“基于声誉的保护设置”时,“应用商店应用检查”也会默认打开。因此,如果您是应用程序的开发人员,即使将其提交到应用商店并且用户从应用商店下载,您的应用程序仍将收到警告。用户需要明确关闭此检查,作为开发人员,我们无法强制执行。 - samiksc
1
@samiksc 感谢您指出这一点。您是正确的,在Windows 10中,SmartScreen默认情况下也启用了Microsoft商店应用程序。我已更新我的答案并删除了Microsoft应用商店选项。 - emkey08
3
这就变成了类似于旧的“没有经验就不会被雇用,而你永远也不会得到经验,直到有人雇用你”的问题。SmartScreen当前的消息基本上只是“你不想这样做,因为你太愚蠢而不能自己做出选择,我们甚至不会给你这个选项。”那么如果它不允许任何人运行这个东西,它究竟应该如何建立信任呢? - Steve Rindsberg
2
@emkey08 感谢回复,但我已经拥有代码签名证书超过五年了,并在2021年12月刚刚更新。我认为即使过了6个月,它也不再被视为“新的”。我对我的所有MSI和其中的代码进行了代码签名,但我的客户仍然收到Defender警告。每次应用程序在开发过程中发生变化(这种情况非常普遍),就将其提交给MS是不可行的。在我看来,微软已经过度了。 - Steve Rindsberg
显示剩余6条评论

75

当你点击某个安装程序(.exe)的“属性”时(Windows Defender SmartScreen 阻止了未识别的应用程序),导致无法安装你的应用程序,对于这个问题,我找到了一个解决方案。

  1. 右键单击安装程序(.exe)
  2. 选择“属性”选项
  3. 在属性底部,勾选取消锁定的复选框

此解决方案适用于Heroku CLI (heroku-x64) 安装程序(.exe)


56
这并不能解决其他人下载它的问题! - user2568374
1
可能是你做错了什么,或者你的 (.exe) 文件已经损坏了。@user2568374 - jay thanki
1
这是更好的解决方案。Windows Defender 正在阻止卡巴斯基 AVZ 防病毒工具包 :-O - Bastion
1
你救了我。这个有效。无论如何,我正在安装来自AWS的SAM,应该是安全的。 - Developer404

37
如果您拥有标准的代码签名证书,需要一段时间来建立应用程序信任。根据Microsoft的说法,扩展验证证书能够使开发人员跳过此信任建立阶段。否则,用户将看到一个警告:“Windows Defender SmartScreen 阻止了无法识别的应用程序启动。运行此应用程序可能会对您的 PC 造成风险。” 还有两个按钮:“仍要运行”和“不运行”。 另一篇Microsoft资源指出以下信息(引用):“虽然EV代码签名证书并非必需,但使用此类证书签名的程序即使该文件或发布者之前没有声誉,也可以立即与SmartScreen声誉服务建立联系。EV代码签名证书还具有独特的标识符,使得更易于在证书更新期间维护声誉。”

我的经验如下。自从2005年以来,我们一直在使用常规(非EV)代码签名证书对.MSI、.EXE和.DLL文件进行时间戳签名,直到2018年,SmartScreen从未出现过问题,只有一个案例是我们发布了应用程序的测试版后,它花了3天时间才建立信任。那时候证书处于有效期中间。我不知道SmartScreen在我们应用程序的那个特定版本中可能不喜欢什么,但自那时以来就没有SmartScreen投诉。因此,如果您的证书不是EV证书,则是一个被签署的应用程序(例如.MSI文件)随着时间推移建立信任,而不是证书本身。例如,一个证书几个月前可以发放并用于签署许多文件,但对于每个发布的签名文件,SmartScreen可能需要几天才能停止投诉该文件,就像我们在2018年遇到的情况一样。

我们没有将软件提交给Microsoft恶意软件分析。 Microsoft从2017年开始提供此服务。这可能是Extended Validation(EV)证书的可行替代方案。

总之,为了避免此警告的发生,即使是突然发生,您需要一个扩展验证(EV)代码签名证书,或者将您的软件提交到Microsoft恶意软件分析


3
在SmartScreen上分享类似答案的链接(https://dev59.com/DRz9s4cB2Jgan1znFdK_#50414337)。“购买信任”...嗯... - Stein Åsmul
1
EV证书仅适用于拥有注册公司的人。如果您是没有注册公司的独立软件供应商,则无法购买EV证书。 - lkessler

6

更新: 另外一篇文章在这里:如何在Installshield 2018中添加发布者(可能更好)。


关于这个问题我了解不太多,但请看看下面这个回答是否有用(如果有用请告诉我们,以便我能提供更好的答案):如何通过Windows Defender SmartScreen Protection?这个问题涉及到BitRock——一个非MSI安装程序技术,但总体问题似乎是相同的。

从我上面回答的一个链接中提取出来的内容“……仅凭证书已经不足以获得信任……SmartScreen是基于声誉的,类似于StackOverflow的方式…… SmartScreen信任不会引起问题的安装程序。Windows机器向Redmond发送关于安装程序和它们引起了多少麻烦的遥测数据。如果你得到足够的支持,那么SmartScreen就会停止自动阻止您的安装程序。这需要时间和大量的安装才能获得足够的支持。没有办法找出您到了多远。”

说实话,这对我来说现在都是新闻,所以如果你自己挖掘到任何信息,请回复我们。


你标记的实际对话框文本与Zone.Identifier替代数据流和一个值为3的文件相关(有关详细信息请参见上面链接中的答案)。


我无法将此问题标记为先前的问题的副本,因为它没有被接受的答案。现在让我们把两个问题都保留下来?(一个问题是针对MSI,一个问题是针对非MSI。)


在我看来,这都是骗局。我帮助过一些客户解决这个问题。最让人头疼的是,该过程需要一个FIPS 140-2二级令牌,这使得自动化构建成为了一个真正的挑战。 - Christopher Painter
1
也许只是通过 virustotal.com 运行设置,然后等待几天可能会影响信任度?谁知道呢?本质上,在安全软件识别之前,它只是一个“未知二进制文件”。怀疑它不会有太大帮助,但值得一试。 - Stein Åsmul
也许Windows Defender的遥测数据是实际使用的?因此,可以在几台也与微软进行通信的PC上运行Defender?我对此并不了解太多,只知道“某些东西”被发送回死星 :-)。我会在我的MSI上运行Defender以及它的管理映像(将没有数字证书),看看会发生什么。如果有人能够阐明这种遥测数据的实际情况,那就太好了。 - Stein Åsmul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接