使用 SignTool 对应用包进行签名

SignTool 是一种命令行工具,用于使用证书对应用包或捆绑包进行数字签名。 证书可由用户创建(用于测试目的),也可以由公司颁发(用于分发)。 对应用包进行签名可让用户验证应用的数据在签名后未进行修改,同时确认对其进行签名的用户或公司的标识。 SignTool 可以对加密或未加密的应用包和捆绑包进行签名。

重要

如果使用 Visual Studio 开发应用,建议使用 Visual Studio 向导来创建应用包并对其进行签名。 有关更多信息,请参阅使用 Visual Studio 打包 UWP 应用使用 Visual Studio 从源代码打包桌面应用程序

有关代码签名和证书的更多信息,请参阅代码签名简介

先决条件

  • 打包的应用
    要详细了解手动创建应用包,请参阅使用 MakeAppx.exe 工具创建应用包

  • 有效的签名证书
    有关创建或导入有效签名证书的更多信息,请参阅创建或导入用于包签名的证书

  • SignTool.exe
    根据 SDK 的安装路径,下面是 SignTool 在 Windows 10 电脑上的位置:

    • x86:C:\Program Files (x86)\Windows Kits\10\bin\<sdk 版本>\x86\SignTool.exe
    • x64:C:\Program Files (x86)\Windows Kits\10\bin\<sdk 版本>\x64\SignTool.exe

使用 SignTool

SignTool 可用于对文件进行签名、验证签名或时间戳、移除签名等。 为了对应用包进行签名,我们将重点介绍 sign 命令。 有关 SignTool 的完整信息,请参阅 SignTool 参考页。

确定哈希算法

使用 SignTool 对应用包或捆绑包进行签名时,SignTool 中使用的哈希算法必须与用于打包应用的算法相同。 例如,如果使用 MakeAppx.exe 创建具有默认设置的应用包,则必须在使用 SignTool 时指定 SHA256,因为这是 MakeAppx.exe 使用的默认算法。

要找出打包应用时使用的哈希算法,请提取应用包的内容并查看 AppxBlockMap.xml 文件。 要了解如何解压缩/提取应用包,请参阅从包或捆绑包提取文件。 哈希方法位于 BlockMap 元素中,格式如下:

<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="http://www.w3.org/2001/04/xmlenc#sha256">

下表显示了每个 HashMethod 值及其相应的哈希算法:

HashMethod 值 哈希算法
http://www.w3.org/2001/04/xmlenc#sha256 SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512

注意

由于 SignTool 的默认算法是 SHA1(在 MakeAppx.exe 中不可用),因此在使用 SignTool 时必须始终指定哈希算法。

对应用包进行签名

满足所有先决条件并确定用于打包应用的哈希算法后,即可对其进行签名。

SignTool 包签名的常规命令行语法为:

SignTool sign [options] <filename(s)>

用于对应用进行签名的证书必须是 .pfx 文件,或者安装在证书存储中。

要使用 .pfx 文件中的证书对应用包进行签名,请使用以下语法:

SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.appx
SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.msix

请注意,/a 选项允许 SignTool 自动选择最佳证书。

如果证书并非 .pfx 文件,请使用以下语法:

SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.msix

或者,可以使用以下语法指定所需证书的 SHA1 哈希,而不是<证书的名称>:

SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.msix

有关更多示例,请参阅使用 SignTool 对文件进行签名

请注意,某些证书不使用密码。 如果证书没有密码,请从示例命令中省略“/p <你的密码>”。

使用有效证书对应用包进行签名后,即可将包上传到 Microsoft Store。 有关将应用上传和提交到 Store 的更多指导,请参阅应用提交