82

我们是开发人员,我们有一个数字签名的应用程序安装程序。当我们安装这个应用程序时,它会弹出智能屏幕,影响安装体验。它说

Windows 保护您的 PC

Windows SmartScreen 阻止了无法识别的应用程序启动,运行此应用程序可能会使您的 PC 面临风险。

我认为微软除了数字签名之外还有一些验证应用程序的策略。有没有人有这个问题的经验,请给我一些线索来解决这个问题?

4

9 回答 9

48

我们刚刚经历了从的Authenticode 证书迁移到证书的整个过程(不是 EV 证书,只是可以在我们的自动构建过程中使用的普通证书)。

Microsoft 不再提供任何将声誉从现有证书转移到新证书的方法。所以不要试图打电话给他们的支持。你只会浪费很多时间和精力。他们将无法提供帮助。

微软声称,如果新旧证书具有相同的文本内容,则声誉建立得更快。更具体地说,这是我从SmartScreen® Filter 的应用程序信誉功能支持团队得到的回复:

请注意,每当您续订具有已知声誉的证书时,您可能会在初次下载使用续订证书签名的文件时看到一些警告。但是,在更新的证书上建立已知声誉通常比在新证书上更快。虽然更新的证书建立了声誉,但用户仍然可以单击以运行或保存下载。为此,他们选择 Actions | 更多选项 | 无论如何从下载管理器运行。

确保 SmartScreen 不会警告用户的最佳方法是运行Windows 应用程序认证工具包 (WACK),它应该包含在 Windows SDK 下载中:

Windows 应用认证工具包

运行测试后,WACK 解释了如何继续:

最终报告 - 验证通过

将成功申请认证的 XML 结果上传到https://sysdev.microsoft.com。几天后,SmartScreen 将知道用于认证程序的数字签名,并且不再警告用户下载。

注意我们无法在 Windows 8.1 的最新更新上验证我们的应用程序,我们必须使用全新安装的 Windows 8.1 才能让 WACK 成功验证我们的所有程序。

于 2015-02-06T05:44:40.263 回答
47

如果您使用从 CA 购买的证书对安装程序进行了签名,您应该联系 CA 以了解他们为何未能与 Microsoft 合作以消除此警告。

如果证书不是来自 CA,而是自签名证书,您将不得不求助于 CA。

微软已经在其 Windows 团队博客上发布了大部分信息,

https://blogs.msdn.microsoft.com/ie/2012/08/14/microsoft-smartscreen-extended-validation-ev-code-signing-certificates/

最佳实践

开发人员仍应遵循我们在过去博客文章中建议的最佳实践。我们在该指南中添加了通过 Windows 应用商店分发应用程序的其他选项以及 EV 代码签名选项:

  • 通过 Windows 应用商店分发您的应用

Windows 8 应用程序需要通过 Windows 应用商店开发人员入职和应用程序审核流程。Windows 8 应用程序不在 Windows 8 中 SmartScreen 应用程序信誉检查或警告的范围内。

  • 对您的程序进行数字签名(标准或 EV 代码签名)

生成信誉并将其分配给数字证书以及特定文件。数字证书允许聚合数据并将其分配给单个证书,而不是许多单独的程序。尽管不是必需的,但由 EV 代码签名证书签名的程序可以立即通过 SmartScreen 信誉服务建立信誉,即使该文件或发布者之前不存在信誉。EV 代码签名证书还具有唯一标识符,可以更轻松地在证书续订期间维护声誉。只有作为 Windows 根证书计划成员的 CA 颁发的 Authenticode 证书才能建立信誉。

目前,赛门铁克和 DigiCert 正在提供 EV 代码签名证书。

  • 不要签署或分发恶意代码

分发检测为恶意的代码将删除文件中的信誉以及相关数字证书中的任何信誉——即使使用 EV 代码签名证书进行签名。

  • 申请 Windows 徽标或 Windows 8 桌面应用认证

在此处了解有关这些计划的更多信息:Windows 8 桌面应用程序认证(Windows 应用商店提交所需) Windows 徽标计划

于 2012-09-07T05:59:38.797 回答
15

我一直在寻找一段时间,所以我将分享我到目前为止找到的内容。

我没有在 Microsoft 的 Windows 8 中找到任何有关此功能的文档,但我可能只是在错误的地方寻找。

我阅读的大多数文章都讨论了 SmartScreen 过滤器的工作原理如下:

  • 在运行下载的安装程序或可执行文件之前,Windows 8 会咨询数据库。
  • 数据库可以报告该程序是否已:
    • 报告为恶意/网络钓鱼,(并由 Microsoft 员工验证)。
    • 许多人使用/运行。

如果有足够多的人运行该安装程序,而没有将其报告为恶意程序,最终该程序将被标记为安全,其他用户将不会收到烦人的消息。

一些资料来源:(这里)(这里

用户安装程序时发送给 Microsoft 的信息包括 IP 地址、安装程序的哈希值和数字签名,可能还有应用程序的文件名。(见这里

Microsoft 员工可以直接访问数据库,以添加和标记安全的所有 Microsoft 应用程序。

也许微软已经设置了一种方法来预先认证您的安装程序,如果没有,您可能只需要等到足够多的人运行安装程序。(但不确定会有多少)。

于 2012-09-07T06:03:13.407 回答
13

我刚刚经历了这个过程,我将在其中添加一些信息。

1) 买一辆电动汽车。这很值得。下次升级证书时,升级到 EV 证书。价格每年增加约 100 美元。EV 证书被认为更安全,因为它们更难被窃取。发给您时,将发给您一个硬件令牌设备以完成签名。不幸的是,最终标志与自动构建不兼容。

它并不像听起来那么可怕。他们将为您提供第二个证书来签署您的可执行文件(在安装程序内),该证书仍然与自动化兼容。安装程序上的签名必须与硬件令牌一起签名。

2)如果你不想获得EV证书,你需要声誉。如果您正在升级,Microsoft 会将信誉从您的旧证书转移到您的新证书。您必须联系 MSDN 技术支持,大约一周后即可完成。我提交了我的新旧安装程序——带有新旧证书——他们修复了它。

3) 如果这是您的第一个证书,那么您会一直使用 SmartScreen,直到获得声誉。您可能应该通过 sysdev.microsoft.com 对您的应用程序进行认证。但是,在您获得 Microsoft 的良好声誉之前,您需要下载多少次才能真正知道。

这就是我的经验。

于 2013-10-01T04:15:10.827 回答
5

由于 Windows 8.1 已经发布。

  • 当您通过 Internet 将所有标准代码签名证书下载到您的 PC 并尝试安装它们时,Microsoft 停用了所有可信任的标准代码签名证书,但如果您通过 USB 或 CD-ROM 分发您的应用程序,则标准代码签名证书应用程序可以工作。

  • 不要使用signtool.exe来验证(signtool.exe verify /pa mysetup.exe会显示成功,但当其他用户下载它并尝试安装 SmartScreen 时会失败,弹出窗口将继续显示)

使用 Windows 应用认证工具包 (WACK)

在此处输入图像描述

  • 此标准代码签名证书已失效。意味着如果您拥有标准代码签名证书,它将不再像过去那样可靠地工作,即使 Windows 应用程序认证工具包 (WACK) 显示 PASS 和 WARNING,并不意味着其 100% 验证成功

在此处输入图像描述

您必须购买 EV 证书 ( https://www.globalsign.com/en/code-signing/ )

因此,要 100% 成功,请遵循勺子饲料:

第 1 步:转到https://sysdev.microsoft.com并登录

a) 创建公司帐户 > 下一步

b) 下载微软提供的 zip 格式的 winqual.exe 文件,现在用您的标准证书或 EV 证书对 winqual.exe 进行签名,然后单击下一步上传文件进行验证。

就我而言,它失败了,因为我拥有微软不再允许的标准证书。所以你们现在要做的就是购买EV许可证,否则你就完蛋了,并且可以在没有任何线索的情况下花费你的一生来解决这个问题。

在此处输入图像描述

于 2015-03-15T23:41:11.480 回答
4

我已经测试了 EV 证书解决方案,它确实有效。

遗憾的是,我还要提到 EV 证书与在服务上下文下执行签名的 TeamBuild 不兼容。EV 证书需要与 SafeNet, Inc 提供的加密服务提供商接口的硬件令牌,以供所有授权的 EV 证书供应商(VeriSign 和 DigiCert)使用。

当签名发生时,来自 Safenet 的驱动程序将提示输入与在服务上下文中执行有些不兼容的密码。此外,Safenet 提供的保护可以防止从实际控制台以外的任何地方进行签名。您甚至无法从远程桌面会话中签名。因此,从 Teambuild 内部签约充其量是有问题的,而在最坏的情况下是不可能的。

我曾与 Microsoft 合作过,他们无法提供解决方法来签署或任何其他方式来在 SmartScreen 下获得即时声誉。

于 2013-07-30T16:58:11.997 回答
1

不幸的是,我没有足够的代表来简单地评论上述答案之一。但是,如果您为已发布的应用程序指定部分信任(我选择了 Internet 区域)并且有代码签名证书,则不会显示智能屏幕警告(在 Win10 上检查)。

于 2015-08-24T12:34:14.750 回答
1

我使用令牌上的 EV 证书 (GlobalSign) 以自动方式签署我的应用程序。使用 .bat 文件。在“.bat”文件中,输入 ex: (对于 sha1)

SignTool.exe sign /n "Exact Enterprise name in the cert - token" /t "http://timestamp.globalsign.com/scripts/timstamp.dll" "c:\Patch_to_file\Filename.exe"

“证书中的确切企业名称 - 令牌”应该是证书中的确切名称(令牌)

于 2016-04-14T17:29:22.493 回答
1

“文件的版本与您正在运行的 Windows 版本不兼容”。在 Windows 2008 服务器下,没有“更多信息”按钮可供选择安装。

当我们使用非 Microsoft 产品 (Delphi) 开发 Windows 桌面软件(不是“应用程序”)并使用 Innosetup 作为我们的安装程序时,应用程序验证毫无意义。它在那里闲置了 30 分钟,我们只需启动应用程序,然后手动关闭应用程序,它就会生成通过报告。

我们对所有版本和其中的每个可执行文件进行代码签名。

当我们将 XML 上传到 Microsoft 时,经过认证的 XML 位于与我们的主要开发人员帐户无关的站点上,无法将其发布到 Microsoft Store。每个应用程序浪费了 45 分钟。

于 2016-08-01T06:13:00.310 回答