如何使用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 ...
随机推荐
- Kali Linux虚拟机安装完整安装过程及简单配置(视频)
点击播放视频 附:视频中出现的两个txt文本,包含了大致的安装与配置过程: 文本1:KaliLinux虚拟机安装和初步配置 Kali Linux虚拟机安装和初步配置 大家好,今天给大家演示一下在VMw ...
- Ubuntu 18.04 on Windows 10 更改 Oh-My-Zsh agnoster 主题下的目录背景色
题外话 我的 MacBook Pro 已经使用了6年多的时间,尽管作为一个 .NET 程序员绝大部分时间都是在 Windows 下工作,直到 .NET Core 的逐步成熟.要说 Mac OS,最满意 ...
- 使用java检测网络连接状况
windows中可以通过在cmd中使用ping命令来检测网络连接状况,如下: 网络连接正常时: 网络未连接时: 在java中可以通过调用ping命令来判断网络是否连接正常: package modul ...
- 使用STM32Cube在STM32F7开发板上实现SD+Freertos+Fatfs
简介 最近项目中可能需要使用到SD卡,所以需要对SD卡的配置和使用调研,在配置过程中遇到了一些问题,在此记录一下. STM32Cube配置 Pinout 只需要注意绿色部分的设定 Clock配置 这里 ...
- Effective Java 第三版——43.方法引用优于lambda表达式
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
- Executor框架简介
Executor框架是在Java5中引入的,可以通过该框架来控制线程的启动,执行,关闭,简化并发编程.Executor框架把任务提交和执行解耦,要执行任务的人只需要把任务描述清楚提交即可,任务的执行提 ...
- STL--multiset用法
multiset: multiset<int>s; 定义正向迭代器与正向遍历: multiset<int>::iterator it; for(it=s.begin();it! ...
- BZOJ_2238_Mst_树剖+线段树
BZOJ_2238_Mst_树剖+线段树 Description 给出一个N个点M条边的无向带权图,以及Q个询问,每次询问在图中删掉一条边后图的最小生成树.(各询问间独立,每次询问不对之后的询问产生影 ...
- css3新增动画
1.transiition过渡:样式改变就会执行transition (1)格式:transiition:1s width linear,2s 1s height; (2)参数: transition ...