如何创建应用包签名证书

重要

MakeCert.exe已弃用。 有关创建证书的当前指南,请参阅 创建用于包签名的证书

 

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

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

需要了解的事项

技术

先决条件

说明

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

若要使用要签名的应用包创建签名证书,签名证书的使用者名称必须与该应用的AppxManifest.xml中 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 创建个人信息Exchange (.pfx) 文件

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

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 对应用包进行签名。 但在将证书安装到本地计算机的受信任证书存储中之前,本地计算机仍不信任用于部署应用包。 可以使用Certutil.exe,其中包含Windows。

使用 WindowsCertutil.exe安装证书

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

  2. 运行以下命令:

    Certutil -addStore TrustedPeople MyKey.cer
    

建议删除证书(如果证书不再使用)。 在同一个管理员命令提示符下运行以下命令:

Certutil -delStore TrustedPeople certID

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

Certutil -store TrustedPeople

安全注意事项

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

示例

创建应用包示例

概念

代码签名最佳做法

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

为应用包签名