如何创建应用包签名证书

重要

MakeCert.exe 已弃用。 有关创建证书的最新指南,请参阅为包签名创建证书

 

了解如何使用 MakeCert.exePvk2Pfx.exe 创建测试代码签名证书,以便可以对 Windows 应用包进行签名。

部署打包的 Windows 应用程序之前,必须对其进行数字签名。 如果未使用 Microsoft Visual Studio 2012 创建和签名应用包,则需要创建和管理自己的代码签名证书。 可以使用 Windows 驱动程序工具包 (WDK) 中的 MakeCert.exePvk2Pfx.exe 来创建证书。 然后,可以使用证书对应用包进行签名,以便在本地部署它们进行测试。

需要了解的事项

技术

先决条件

说明

第 1 步:确定包的发布者名称

若要使创建的签名证书可用于要签名的应用包,签名证书的使用者名称必须与该应用程序的 Identity 元素的 Publisher 属性相匹配。 例如,假设 AppxManifest.xml 包含:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

对于在下一步中使用 MakeCert 实用工具指定的 publisherName 参数,请使用"CN=Contoso Software, O=Contoso Corporation, C=US"。

注意

此参数字符串用引号指定,区分大小写和空格。

 

为 AppxManifest.xml 中的 Identity 元素定义的 Publisher 属性字符串必须与为证书使用者名称使用 MakeCert /n 参数指定的字符串相同。 尽可能复制并粘贴字符串。

第 2 步:使用 MakeCert.exe 创建私钥

使用 MakeCert 实用工具创建自签名测试证书和私钥:

MakeCert /n publisherName /r /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e <expirationDate> /sv MyKey.pvk MyKey.cer

此命令提示你为 .pvk 文件提供密码。 我们建议选择强密码,并将私钥保存在安全的位置。

出于以下原因,我们建议使用上例中建议的参数:

/r

创建自签名根证书。 这简化了测试证书的管理。

/h 0

将证书的基本约束标记为最终实体。 这将阻止证书被用作可以颁发其他证书的证书颁发机构 (CA)。

/eku

设置证书的增强型密钥使用 (EKU) 值。

注意

不要在两个逗号分隔的值之间留空格。

 

  • 1.3.6.1.5.5.7.3.3 表示该证书可用于代码签名。 始终指定此值以限制证书的预期用途。
  • 1.3.6.1.4.1.311.10.3.13 表示该证书支持生存期签名。 通常,如果签名带有时间戳,只要证书在加盖时间戳时是有效的,则即使证书过期,签名仍然有效。 无论签名是否带有时间戳,此 EKU 都会强制签名过期。

/e

设置证书的到期日期。 以 mm/dd/yyyy 格式为 expirationDate 参数提供一个值。 我们建议只选择测试所需的到期日期,通常不超过一年。 此过期日期与生存期签名 EKU 一起使用,可以帮助限制证书可能被泄露和滥用的窗口。

有关其他选项的详细信息,请参阅 MakeCert

第 3 步:使用 Pvk2Pfx.exe 创建个人信息交换 (.pfx) 文件

使用 Pvk2Pfx 实用工具将 MakeCert 创建的 .pvk 和 .cer 文件转换为 .pfx 文件,你可以使用 SignTool 对应用包进行签名:

Pvk2Pfx /pvk MyKey.pvk /pi pvkPassword /spc MyKey.cer /pfx MyKey.pfx [/po pfxPassword]

MyKey.pvkMyKey.cer 文件与前一步骤中创建的 MakeCert.exe 文件相同。 通过使用可选的 /po 参数,可以为生成的 .pfx 指定不同的密码;否则,.pfx 的密码与 MyKey.pvk 相同。

有关其他选项的详细信息,请参阅 Pvk2Pfx

注解

创建 .pfx 文件后,可以将该文件与 SignTool 一起使用来对应用包进行签名。 有关详细信息,请参阅如何使用 SignTool 对应用包进行签名。 但是,在将证书安装到本地计算机的受信任证书存储中之前,本地计算机仍然不信任该证书来部署应用包。 可以使用 Windows 附带的 Certutil.exe

使用 WindowsCertutil.exe 安装证书

  1. 以管理员身份运行 Cmd.exe

  2. 运行以下命令:

    Certutil -addStore TrustedPeople MyKey.cer
    

如果证书不再使用,建议删除这些证书。 在相同的管理员命令提示符下,运行以下命令:

Certutil -delStore TrustedPeople certID

certID 是证书的序列号。 运行以下命令以确定证书序列号:

Certutil -store TrustedPeople

安全注意事项

通过将证书添加到本地计算机证书存储,你会影响计算机上的所有用户的证书信任。 建议将测试应用包所需的任何代码签名证书安装到受信任人员证书存储中。 当不再需要这些证书时,立即删除这些证书,以防止它们被用来危害系统信任。

示例

创建应用包示例

概念

代码签名最佳做法

如何使用 SignTool 对应用包进行签名

为应用包签名