备注

有关签署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签署应用程序包的更多相关文章

  1. 如何以编程方式签署应用程序包(C ++)

    了解如何使用SignerSignEx2函数对应用包进行签名. 如果要使用Packaging API以编程方式创建Windows应用商店应用包,则还需要在部署之前对应用包进行签名.Packaging A ...

  2. 转:vs发布window应用程序时出错:未能签名 ...\setup.exe

      在vs发布window应用程序过程中,提示“SignTool 报告了一个错误‘未能签名 ...\setup.exe.SignTool 错误: ISignCode::Sign 返回的错误: 0x80 ...

  3. signtool对EXE进行签名

    https://msdn.microsoft.com/zh-cn/library/9sh96ycy(VS.80).aspx .NET Framework 2.0   其他版本   文件签名工具使用 A ...

  4. 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP

    原文 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP 能上架 Windows 应用商店的并不一定必须是 UWP 应 ...

  5. VS 2012: Post build 中使用 Signtool.exe,对于特殊password中字符的处理方法

    众所周知,在VS(Visual Studio)里面可以利用post build 进行一些类似于CMD或者批处理的操作. 最近的项目中用到了MicroSoft的SignTool工具,目的是要把一个数字签 ...

  6. signtool.exe not found

    When check the [sign the Xap File] checkbox, build project failed due to signtool.exe not found. Fol ...

  7. SignTool.exe(签名工具)

    水漂收集 -- SignTool.exe(签名工具) =============C#.Net 篇目录============== 签名工具是一个命令行工具,用于用证书对文件进行数字签名,验证文件和时间 ...

  8. Windows文件居然有解锁一说,并且还会引起SignTool Error,真是昏倒!

    I'm running Windows 7 and when I try to run a batch file, it says, "The publisher could not be ...

  9. Eclipse在Jar形成和应用程序包

    最近的熟悉Java语言.在学习过程中Eclipse经常使用再熟悉它.本文简单说下Jar形成和应用程序包. Java在Jar相当于包C/C++该lib库,它是.class文件打包:经常使用Jar包有AP ...

随机推荐

  1. 2018 Unite大会——《使用UPA工具优化项目》演讲实录

    2018年5月11日至13日,腾讯WeTest与Unity联合打造的移动游戏性能分析工具(Unity Performance Analysis,以下称为UPA)正式亮相2018 Unite大会,为Un ...

  2. JVM学习记录-垃圾收集器

    先回顾一下上一篇介绍的JVM中常见几种垃圾收集算法: 标记-清除算法(Mark-Sweep). 复制算法(Copying). 标记整理算法(Mark-Compact). 分代收集算法(Generati ...

  3. [爬虫]scrapy框架

    Scrapy介绍 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 所谓网络爬虫,就是一个在网上到处或定向抓取数据 ...

  4. java 中 “==” 和 equals 的区别

    转自https://www.cnblogs.com/www123----/p/7857298.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin ...

  5. netty源码分析之揭开reactor线程的面纱(一)

    netty最核心的就是reactor线程,对应项目中使用广泛的NioEventLoop,那么NioEventLoop里面到底在干些什么事?netty是如何保证事件循环的高效轮询和任务的及时执行?又是如 ...

  6. BZOJ_3191_[JLOI2013]卡牌游戏_概率DP

    BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...

  7. IOS-QQ第三方登录

    iOS QQ第三方登实现   我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆 如图: 下面我们主要讲一下qq的第三方登陆如何实现 首先,到官网注册: http://wiki.conne ...

  8. 关于String类型中==和equals的区别。

    "=="操作符的作用 1.用于基本数据类型的比较,比较的是值. 2.用于比较对象,判断对象的引用是否指向堆内存的同一块地址. equals的作用 用于比较两个对象的内容是否相同 代 ...

  9. ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理)

    前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...

  10. 一份完整的阿里云 Redis 开发规范,值得收藏!

    来源:yq.aliyun.com/articles/531067 作者:付磊-起扬 本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通 ...