对应用程序包签名(Windows 应用商店应用程序)

默认情况下,Visual Studio 生成的所有应用程序包都使用测试证书进行签名。在创建包时,Visual Studio 将生成包括签名包本身的文件夹。该文件夹中包括的证书 (.cer) 文件包含用于对包进行签名的公钥。在安装应用程序包之前,必须在计算机上安装此密钥。

生成测试证书

在创建项目时,会生成证书文件 (.pfx) 并将其添加到项目中。

证书的“主题”字段设置为源清单 (.appxmanifest) 文件的 Identity 元素的 Publisher 特性。

  • 如果创建本地包,则 Publisher 特性的默认值为您的用户名。

  • 如果为 Windows 应用商店创建包或将您的应用程序与其关联,则在包创建期间登录时,Publisher 特性将设置为从 应用商店的开发人员帐户中获取的 Publisher ID。

证书创建过程还会向项目文件中添加属性:

<PackageCertificateKeyFile> RisingStar_TemporaryKey.pfx </PackageCertificateKeyFile>

PackageCertificateKeyFile 的值是源证书本身的相对路径或完整路径。

如果缺少证书,则它在从**“存储”**菜单创建包时创建,而不是在命令提示符中创建包时创建。在 Visual Studio 创建证书时,会设置以下属性的值:

  • **“基本约束”**扩展的值设置为 Subject Type=End Entity

    备注

    基本约束扩展标识证书的主体是否为证书颁发机构 (CA)。此扩展还定义包括此证书的有效证书路径的最大深度。“基本约束”属性指定认证的公钥是否可以验证证书签名。

  • “增强型密钥用法”(EKU) 扩展的值将设置为**“代码签名”**。

证书在创建之日起一年内有效。有关如何续订证书的信息,请参见续订证书

提示

如果在签名过程中出现类似于“指定的证书无效,因为它已过期或有其他发行版”的错误,请使用清单设计器创建一个测试证书来替换旧证书。

验证证书

在打包过程中,Visual Studio 会通过以下方式验证指定的证书:

  • 验证**“基本约束”**扩展是否存在以及它的值,该值必须是 Subject Type=End Entity 或未指定。

  • 验证**“增强的键用法”属性的值,这必须包含“代码签名”,也可以包含“生存期签名”**。禁止任何其他 EKU。

  • 验证**“KeyUsage (KU)”属性的值,该值必须是“Unset”“DigitalSignature”**。

  • 验证私钥是否存在。

  • 验证证书是否处于活动状态、尚未过期并且未被撤消。

在某些情况下,您可能需要更好地控制使用的证书以及对证书运行的验证检查。MSBuild 属性 EnableSigningChecks 可控制执行上述哪些证书检查。如果将该属性设置为 True(默认值),则 Visual Studio 会运行所有检查。如果将该属性设置为 False,则 Visual Studio 将仅执行下列任务:

  • 验证私钥是否存在。

  • 验证**“增强型密钥用法”属性的值是否包含“代码签名”**。

  • 验证证书是否处于活动状态、尚未过期并且未被撤消。

备注

当 EnableSignignChecks 设置为 False 时,PowerShell 脚本可能不起作用,因为自定义证书可能不符合该脚本安装应用程序包所需的所有规则。有关更多信息,请参见本地共享应用程序包(Windows 应用商店应用程序)

选择备用证书

Visual Studio 会在创建项目时自动创建一个证书,但你也可以创建自己的证书或使用现有证书对包签名。

创建或使用备用证书

  1. 在**“解决方案资源管理器”中,打开 .appxmanifest 文件的快捷菜单,选择“打开方式”,然后选择“应用程序清单设计器”**。

  2. 在**“应用程序清单设计器”中,选择“打包”选项卡,然后选择“选择证书”**按钮。

  3. 在**“选择证书”对话框中,展开“配置证书”**列表,然后选择以下选项之一:

    • 从证书存储中选取
      从操作系统的证书存储中选取Personal证书之一。

    • 从文件中选择
      从文件系统中选取现有证书文件。

    • 创建测试证书
      使用所选择的Publisher ID 创建证书。还可以创建密码。

无论选择哪个选项,证书文件都会添加到项目中,并相应地更新 PackageCertificateThumbprint 和 PackageCertificateKeyFile 项目属性。

备注

如果在签名过程中出现类似于“指定的证书无效,因为它已过期或有其他发行版”的错误,请使用清单设计器创建一个自定义证书来替换旧证书。

续订证书

Visual Studio 生成的默认证书将在一年后的证书创建日期到期。在证书过期之前,必须使用应用程序清单设计器重新生成证书,或如前面的过程所述提供不同的有效证书。

续订证书

  1. 在**“解决方案资源管理器”中,打开 .appxmanifest 文件的快捷菜单,选择“打开方式”,然后选择“应用程序清单设计器”**。

  2. 在**“应用程序清单设计器”中,选择“打包”选项卡,然后选择“选择证书”**按钮。

  3. 在**“选择证书”对话框中,展开“配置证书”列表,然后选择“创建测试证书”**。

  4. 在**“创建测试证书”对话框中,单击“确定”**按钮。

    Visual Studio 会重新生成该证书,它具有新的到期日期。

删除或导出证书

您可能需要删除或导出已过期或者已被破坏、损坏或被另一个证书替换的证书。有关如何删除或导出证书的信息,请参见如何使用证书控制台

修改已安装的应用程序

如果修改已安装程序包中的任何文件,签名验证可能会阻止该应用程序启动。若要修改程序包,请使用开发人员许可证在原始的源文件中进行更改,然后重新部署已修改的程序包。有关开发人员许可证的详细信息,请参见获取开发人员许可证(Windows 应用商店应用程序)

请参见

概念

重写包清单(Windows 应用商店应用程序)

使用 Visual Studio 2012 打包 Windows 应用商店应用程序