应用包签名是创建可部署的 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.xml 和 AppxSignature.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。