使用 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 的更多指导,请参阅应用提交。