备注

有关签署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. Kali Linux虚拟机安装完整安装过程及简单配置(视频)

    点击播放视频 附:视频中出现的两个txt文本,包含了大致的安装与配置过程: 文本1:KaliLinux虚拟机安装和初步配置 Kali Linux虚拟机安装和初步配置 大家好,今天给大家演示一下在VMw ...

  2. Ubuntu 18.04 on Windows 10 更改 Oh-My-Zsh agnoster 主题下的目录背景色

    题外话 我的 MacBook Pro 已经使用了6年多的时间,尽管作为一个 .NET 程序员绝大部分时间都是在 Windows 下工作,直到 .NET Core 的逐步成熟.要说 Mac OS,最满意 ...

  3. 使用java检测网络连接状况

    windows中可以通过在cmd中使用ping命令来检测网络连接状况,如下: 网络连接正常时: 网络未连接时: 在java中可以通过调用ping命令来判断网络是否连接正常: package modul ...

  4. 使用STM32Cube在STM32F7开发板上实现SD+Freertos+Fatfs

    简介 最近项目中可能需要使用到SD卡,所以需要对SD卡的配置和使用调研,在配置过程中遇到了一些问题,在此记录一下. STM32Cube配置 Pinout 只需要注意绿色部分的设定 Clock配置 这里 ...

  5. Effective Java 第三版——43.方法引用优于lambda表达式

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  6. freemarker导出word文档

    使用freemarker导出word文档的过程 **************************************************************************** ...

  7. Executor框架简介

    Executor框架是在Java5中引入的,可以通过该框架来控制线程的启动,执行,关闭,简化并发编程.Executor框架把任务提交和执行解耦,要执行任务的人只需要把任务描述清楚提交即可,任务的执行提 ...

  8. STL--multiset用法

    multiset: multiset<int>s; 定义正向迭代器与正向遍历: multiset<int>::iterator it; for(it=s.begin();it! ...

  9. BZOJ_2238_Mst_树剖+线段树

    BZOJ_2238_Mst_树剖+线段树 Description 给出一个N个点M条边的无向带权图,以及Q个询问,每次询问在图中删掉一条边后图的最小生成树.(各询问间独立,每次询问不对之后的询问产生影 ...

  10. css3新增动画

    1.transiition过渡:样式改变就会执行transition (1)格式:transiition:1s width linear,2s 1s height; (2)参数: transition ...