对 Windows 10 应用包进行签名

应用包签名是创建可部署的 Windows 10 应用包过程中的必需步骤。 Windows 10 要求所有应用程序都使用有效的代码签名证书进行签名。

若要成功安装 Windows 10 应用程序,该包不仅必须签名,还需在设备上受信任。 这意味着,该证书必须链接到设备上的某个受信任根。 默认情况下,Windows 10 信任大多数提供代码签名证书的证书颁发机构的证书。

此外,如果要创建 MSIX 捆绑包,则无需单独对捆绑包中的所有包进行签名。 只需对捆绑包进行签名,并且内部的所有包都以递归方式进行签名。

主题 DESCRIPTION
签名的先决条件 本部分讨论对 Windows 10 应用包进行签名所需的先决条件。
使用 SignTool 本部分讨论如何使用 Windows 10 SDK 中的 SignTool 对应用包进行签名。
使用 Device Guard 签名对 MSIX 包进行签名 本部分讨论如何使用 Device Guard 签名对应用进行签名。
创建用于测试的未签名包 本部分讨论如何创建未签名的 msix 包。

时间戳

强烈建议使用证书对应用进行签名时使用 时间戳 。 即使证书过期,时间戳也会保留允许应用部署平台接受应用包的签名。 在包裹检查时,时间戳可以用来验证包裹签名是否在签署的时间内有效。 这样,即使证书不再有效,也允许接受包。 未设置时间戳的包将针对当前时间进行评估,如果证书不再有效,Windows 将不接受该包。

以下是围绕使用/不使用时间戳进行应用签名的各种应用场景:

情景 应用签名时没有使用时间戳 应用使用时间戳进行签名
证书有效 应用将安装 应用将安装
证书无效(已过期) 应用安装失败 将会安装应用,因为在签名时,证书的真实性已由时间戳机构验证

注释

如果应用在设备上成功安装,即使证书过期后,它也会继续运行,无论它是否带有时间戳。

包完整性强制实施

除了确保设备上仅安装受信任的应用程序之外,对 MSIX 包进行签名的另一个好处是,它使 Windows 能够在设备上部署包后强制实施程序包及其内容的完整性。 通过将 AppxBlockMap.xmlAppxSignature.p7x 链接到签名包中,Windows 能够在运行时和 Windows Defender 扫描期间对包的完整性及其内容执行验证检查。 如果认为包被篡改,Windows 将阻止应用程序启动并启动修正工作流,以修复或重新安装包。 对于未通过 Microsoft 应用商店分发的包,如果包声明 uap10:PackageIntegrity 元素并在 Windows 2004 及更高版本上部署,则会强制实施包完整性。 下面是 AppxManifest.xml中包完整性强制执行的示例声明:

<Package ...
xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"  
IgnorableNamespaces="uap10">
...
  <Properties>
    <uap10:PackageIntegrity>
      <uap10:Content Enforcement="on" />
    </uap10:PackageIntegrity>
  </Properties>
...
</Package>

设备模式

Windows 10 允许用户选择在“设置”应用中运行其设备时所在的模式。 这些模式是Microsoft商店应用、旁加载应用和开发人员模式。

Microsoft应用商店应用 是最安全的,因为它只允许从 Microsoft 应用商店安装应用。 Microsoft应用商店中的应用通过认证过程来确保应用安全使用。

“旁加载应用”和“开发人员模式”对其他证书签名的应用的宽容度更高,前提是这些证书受信任并已链接到设备上的某个受信任根。 仅当你是开发人员并生成或调试 Windows 10 应用时,才选择“开发人员”模式。 有关开发人员模式及其提供的内容的详细信息,可 在此处找到。

注释

从 Windows 10 版本 2004 开始,旁加载选项默认处于打开状态。 因此, 开发人员模式 现在是一个切换模式。 企业仍可以通过管理策略关闭Sideloading。