如何使用SignTool签署应用程序包
备注
有关签署UWP应用程序包的信息,请参阅使用SignTool签署应用程序包。
了解如何使用SignTool对Windows应用商店应用包进行签名,以便部署它们。SignTool是Windows软件开发工具包(SDK)的一部分。
必须先对所有Windows应用商店应用包进行数字签名,然后才能部署它们。虽然Microsoft Visual Studio 2012及更高版本可以在创建期间对应用程序包进行签名,但是您使用Windows SDK中的应用程序打包程序(MakeAppx.exe)工具创建的程序包未签名。
备注
您只能使用SignTool在Windows 8及更高版本或Windows Server 2012及更高版本上对Windows应用商店应用包进行签名。您无法使用SignTool在Windows 7或Windows Server 2008 R2等低级操作系统上签署应用程序包。
你需要知道什么
技术
代码签名简介
应用包和部署
签名文件和检查签名的工具
先决条件
SignTool,它是Windows SDK的一部分
有效的代码签名证书,例如,使用MakeCert.exe和Pvk2Pfx.exe工具创建的个人信息交换(.pfx)文件
有关创建有效代码签名证书的信息,请参阅如何创建应用程序包签名证书。
打包的Windows应用商店应用,例如,使用app packager(MakeAppx.exe)工具创建的.appx文件
其他考虑因素
用于对应用程序包进行签名的证书必须符合以下条件:
证书的主题名称必须与包存储在AppxManifest.xml文件的Identity元素中的Publisher属性相匹配。发布者名称是Windows应用商店应用的标识的一部分,因此您必须使证书的主题名称与应用的发布者名称相匹配。这允许根据数字签名检查签名包的标识。有关使用SignTool对应用程序包进行签名可能产生的签名错误的信息,请参阅如何创建应用程序包签名证书的“备注”部分。
证书必须对代码签名有效。这意味着这两个项都必须为真:
证书的扩展密钥用法(EKU)字段必须未设置或包含代码签名的EKU值(1.3.6.1.5.5.7.3.3)。
证书的密钥用法(KU)字段必须未设置或包含数字签名的使用位(0x80)。
证书包含私钥。
证书有效。它是活动的,尚未过期,并且尚未被撤销。
说明
第1步:确定要使用的哈希算法
在对应用程序包进行签名时,必须使用创建应用程序包时使用的相同哈希算法。如果您使用默认设置来创建应用程序包,则使用的哈希算法是SHA256。
如果您使用具有特定哈希算法的app packager来创建应用程序包,请使用相同的算法对包进行签名。要确定用于签名包的哈希算法,可以提取包内容并检查AppxBlockMap.xml文件。BlockMap元素的HashMethod属性指示创建应用程序包时使用的哈希算法。例如:
句法
复制
<BlockMap xmlns="https://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="https://www.w3.org/2001/04/xmlenc#sha256">
前面的BlockMap元素表示使用了SHA256算法。此表列出了当前可用算法的映射:
HashMethod值 要使用的hashAlgorithm
https://www.w3.org/2001/04/xmlenc#sha256 SHA256(.appx默认值)
https://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
https://www.w3.org/2001/04/xmlenc#sha512 SHA512
步骤2:运行SignTool.exe以对包进行签名
使用.pfx文件中的签名证书对包进行签名
句法
复制
SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password filepath.appx
如果未指定,则 SignTool将/ fd hashAlgorithm参数默认为SHA1,并且SHA1对签名应用程序包无效。因此,您必须在签署应用程序包时指定此参数。要签署使用默认SHA256哈希创建的应用程序包,请将/ fd hashAlgorithm参数指定为SHA256:
句法
复制
SignTool sign /fd SHA256 /a /f signingCert.pfx /p password filepath.appx
如果使用非密码保护的.pfx文件,则可以省略/ p password参数。您还可以使用SignTool支持的其他证书选择选项来签署应用程序包。有关这些选项的更多信息,请参阅SignTool。
备注
您不能在已签名的应用程序包上使用SignTool时间戳操作; 该操作不受支持。
如果要为应用程序包添加时间戳,则必须在签名操作期间执行此操作。例如:
句法
复制
SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password /tr timestampServerUrl
filepath.appx
使/ tr timestampServerUrl参数等于RFC 3161时间戳服务器的URL。
备注
本节讨论解决应用包的签名错误问题。
排除应用包签名错误
除了签约的错误,SignTool可以返回,SignTool也可以返回特定于应用程序包的签名错误。这些错误通常显示为内部错误:
句法
复制
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B)
如果错误代码以0x8008开头,例如0x80080206 APPX_E_CORRUPT_CONTENT),则表示正在签名的包无效。在这种情况下,在对包进行签名之前,必须重建包。有关0x8008 *错误的完整列表,请参阅COM错误代码(安全性和设置)。
更常见的是,错误是0x8007000b(ERROR_BAD_FORMAT)。在这种情况下,您可以在事件日志中找到更具体的错误信息:
搜索事件日志
运行Eventvwr.msc。
打开事件日志:事件查看器(本地)>应用程序和服务日志> Microsoft> Windows> AppxPackagingOM> Microsoft-Windows-AppxPackaging / Operational
查找最新的错误事件。
内部错误通常对应于以下之一:
活动ID 示例事件字符串 建议
150 错误0x8007000B:应用清单发布者名称(CN = Contoso)必须与签名证书的主题名称匹配(CN = Contoso,C = US)。 应用清单发布者名称必须与签名的主题名称完全匹配。
[!注意]
这些名称用引号指定,并且都是大小写和空格敏感的。
您可以更新为AppxManifest.xml文件中的Identity元素定义的Publisher属性字符串,以匹配预期签名证书的主题名称。或者,选择一个主题名称与应用清单发布者名称匹配的其他签名证书。清单发布者名称和证书使用者名称都列在事件消息中。
151 错误0x8007000B:指定的签名哈希方法(SHA512)必须与应用程序包块图(SHA256)中使用的哈希方法匹配。 / fd参数中指定的hashAlgorithm不正确(请参阅步骤1:确定要使用的哈希算法)。使用与应用程序包块映射匹配的hashAlgorithm 重新运行SignTool。
152 错误0x8007000B:应用程序包内容必须根据其块映射进行验证。 应用程序包已损坏,需要重建才能生成新的块映射。有关创建应用程序包的更多信息,请参阅使用app packager 创建应用程序包或使用Visual Studio 2012创建应用程序包。
安全考虑因素
对程序包进行签名后,用于对程序包进行签名的证书仍必须由要部署程序包的计算机信任。通过将证书添加到本地计算机证书存储区,可以影响计算机上所有用户的证书信任。我们建议您将用于测试应用程序包的任何代码签名证书安装到“受信任的人”证书存储区,并在不再需要时立即删除这些证书。如果您为签署应用程序包创建自己的测试证书,我们还建议您限制与测试证书关联的权限。有关为签名应用程序包创建测试证书的详细信息,请参阅如何创建应用程序包签名证书。
展示效果如下
Q947MF电动卸灰球阀(喷煤粉专用球阀), Q647F-Q647Y-Q647H气动固定球阀, Q947F-Q947Y-Q947H电动固定球阀, Q47F美标固定球阀, Q41F浮动球阀, Q41F浮动式球阀, 管路球阀, Q71F薄型球阀, 气动管路球阀, Q71F对夹式薄型球阀, Q41F塑料球阀, Q41F-10S塑料法兰球阀, PVC塑料球阀, QY347F氧气球阀, QY347F氧气专用球阀, 不锈钢气源球阀, QG·Y1气源球阀, BQ41H夹套球阀, BQ41H夹套保温球阀, Q41F46衬氟球阀, Q41F46衬四氟球阀, Q941F46电动衬氟球阀, FQ41F46衬氟放料球阀, Q641F46气动衬氟球阀, GU高真空球阀, GUQ气动高真空球阀, Q91SA异径球阀, Q91SA不锈钢异径球阀, Q41F美标球阀, Q41F日标球阀, Q41F日标法兰球阀, Q41F德标球阀, Q41F德标法兰球阀, Q41F铸铁球阀, Q41F铸铁法兰球阀, Q41F铸钢球阀, Q41F铸钢法兰球阀, Q41F碳钢球阀, Q41F碳钢法兰球阀, Q941TC电动陶瓷球阀, Q41TC陶瓷球阀, Q41TC手动陶瓷球阀, Q341TC蜗轮陶瓷球阀, Q641TC气动陶瓷球阀, Q41F国标球阀, Q41F国标法兰球阀, Q41H硬密封球阀, Q41Y金属硬密封球阀, Q41F软密封球阀, Q41F法兰式软密封球阀, Q61F承插焊球阀, Q61F不锈钢承插焊球阀, Q11F锌合金球阀, Q41F不锈钢球阀, Q41F不锈钢法兰球阀, Q41F液化气球阀, Q41F天然气球阀, Q41F液化气专用球阀, Q41F天然气专用球阀, Q41F-ZL法兰铝合金球阀, Q41F-ZL铝合金球阀, Q11F不锈钢一片式球阀, Q11F一片式球阀, Q11F二片式球阀, Q11F两片式球阀, Q41F三片式法兰球阀, Q81F三片式卡箍球阀, Q61F三片式焊接球阀, Q21F三片式活接对焊球阀, Q11F三片式内螺纹球阀, Q11F三片式球阀, Q61F三片式对焊球阀, Q11F三片式承插焊球阀, 高平台球阀, 不锈钢法兰高平台球阀, 高平台三通球阀, 两片式高平台球阀, 上装式球阀, 上装式固定球阀, Q41PPL一体式球阀, Q41PPL一体式高温球阀, KQ41F抗硫球阀, 高温高压球阀, 三片式高平台球阀, Z45W黄铜法兰闸阀, Z941H电动闸阀, Z941H矿用防爆电动闸阀, PZ73TC陶瓷刀型闸阀, Z943WF电动平板闸阀, Z543WF伞齿轮平板闸阀, Z43WF平板闸阀, Z643WF气动平板闸阀, Z43WF手动平板闸阀, Z43WF带导流孔平板闸阀, Z43WF无导流孔平板闸阀, Z43Y-Z63Y-Z83Y高压平板闸阀, Z40H美标闸阀, Z40H美标法兰闸阀, Z41H日标闸阀, Z41H日标不锈钢闸阀, Z41H铸钢闸阀, Z41H铸钢法兰闸阀
如何使用SignTool签署应用程序包的更多相关文章
- 如何以编程方式签署应用程序包(C ++)
了解如何使用SignerSignEx2函数对应用包进行签名. 如果要使用Packaging API以编程方式创建Windows应用商店应用包,则还需要在部署之前对应用包进行签名.Packaging A ...
- 转:vs发布window应用程序时出错:未能签名 ...\setup.exe
在vs发布window应用程序过程中,提示“SignTool 报告了一个错误‘未能签名 ...\setup.exe.SignTool 错误: ISignCode::Sign 返回的错误: 0x80 ...
- signtool对EXE进行签名
https://msdn.microsoft.com/zh-cn/library/9sh96ycy(VS.80).aspx .NET Framework 2.0 其他版本 文件签名工具使用 A ...
- 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP
原文 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP 能上架 Windows 应用商店的并不一定必须是 UWP 应 ...
- VS 2012: Post build 中使用 Signtool.exe,对于特殊password中字符的处理方法
众所周知,在VS(Visual Studio)里面可以利用post build 进行一些类似于CMD或者批处理的操作. 最近的项目中用到了MicroSoft的SignTool工具,目的是要把一个数字签 ...
- signtool.exe not found
When check the [sign the Xap File] checkbox, build project failed due to signtool.exe not found. Fol ...
- SignTool.exe(签名工具)
水漂收集 -- SignTool.exe(签名工具) =============C#.Net 篇目录============== 签名工具是一个命令行工具,用于用证书对文件进行数字签名,验证文件和时间 ...
- Windows文件居然有解锁一说,并且还会引起SignTool Error,真是昏倒!
I'm running Windows 7 and when I try to run a batch file, it says, "The publisher could not be ...
- Eclipse在Jar形成和应用程序包
最近的熟悉Java语言.在学习过程中Eclipse经常使用再熟悉它.本文简单说下Jar形成和应用程序包. Java在Jar相当于包C/C++该lib库,它是.class文件打包:经常使用Jar包有AP ...
随机推荐
- 2017年Kali Linux更新源
终端输入: leafpad /etc/apt/sources.list 打开更新源配置文件,将下面的更新源复制到原内容的前面: #163网易 Kali源 deb http://mirrors.163. ...
- 《javascript语言精粹》读书笔记 Item1 精华与语法
第一章 精华 任何语言都有其精华的部分和鸡肋的部分,javascript也不例外,而且鸡肋的部分还很多.但javascript的流行却不受他的质量影响. javascript为何如此流行?因为他是we ...
- ZooKeeper 安装、配置
http://blog.csdn.net/franklysun/article/details/6424582 如题本文介绍的是ZooKeeper 的安装和配置过程,此过程非常简单,关键是如何应用(将 ...
- 安装scrapy出错Failed building wheel for Twisted
用64位windows10的CMD命令安装pip install scrapy出错: Running setup.py bdist_wheel for Twisted ... error Failed ...
- mutex.go
package} } ) ].GetResponseRange().Kvs[].CreateRevision ) return nil } func (m *Mutex) IsOwner() ...
- 【强连通分量】Bzoj1051 HAOI2006 受欢迎的牛
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...
- java.util.Date 与 java.sql.Date 之间的转换
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String dateStr = sdf.for ...
- PCB设计检查
一.资料输入阶段1.在流程上接收到的资料是否齐全(包括:原理图.*.brd文件.料单.PCB设计说明以及PCB设计或更改要求.标准化要求说明.工艺设计说明文件)2.确认PCB模板是最新的3. 确认模板 ...
- 【CTF 攻略】CTF比赛中关于zip的总结
[CTF 攻略]CTF比赛中关于zip的总结 分享到: --> 本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html 前言 ...
- 循环table 示例
1.循环table里的某一列 //当前第三列 //注:索引从1开始 $("#tabcardno tr td:nth-child(3)").each(function () { va ...