管理 Visual Studio 用来注册应用程序的证书
在创建应用程序包时,Visual Studio 会对您的应用程序进行签名。您可以通过以下方式管理 Visual Studio 用来对您的应用程序进行签名的证书。
生成测试证书
选择备用证书
续订证书
删除或导出证书
决定希望 Visual Studio 执行的验证检查
修改已安装的应用程序
备注
如果在签名过程中出现类似于“指定的证书无效,因为它已过期或有其他发行版”的错误,请使用清单设计器创建一个测试证书来替换旧证书。
生成测试证书
默认情况下,Visual Studio 生成的所有应用程序包都使用测试证书进行签名。在创建包时,Visual Studio 将生成包括签名包本身的文件夹。该文件夹中包括的证书 (.cer) 文件包含用于对包进行签名的公钥。
生成测试证书时 Visual Studio 对项目进行的更改
证书创建过程还会向项目文件中添加属性:
<PackageCertificateKeyFile>
RisingStar_TemporaryKey.pfx
</PackageCertificateKeyFile>
PackageCertificateKeyFile 的值是源证书本身的相对路径或完整路径。
测试证书中的属性和扩展值
在 Visual Studio 生成的测试证书中,将证书的**“主题”**字段设置为源清单 (.appxmanifest) 文件的 Identity 元素的 Publisher 特性。
如果创建本地包,则 Publisher 特性的默认值为您的用户名。
如果创建包或将您的应用程序与其关联,则在包创建期间登录时,会将 Publisher 特性设置为从开发人员帐户获取的 Publisher ID。
**“基本约束”**扩展的值设置为 Subject Type=End Entity。
备注
基本约束扩展标识证书的主体是否为证书颁发机构 (CA)。此扩展还定义包括此证书的有效证书路径的最大深度。“基本约束”属性指定认证的公钥是否可以验证证书签名。
“增强型密钥用法”(EKU) 扩展的值将设置为**“代码签名”**。
选择备用证书
Visual Studio 会在创建项目时自动创建一个证书,但你也可以创建自己的证书或使用现有证书对包签名。
创建或使用备用证书
在**“解决方案资源管理器”中,打开 .appxmanifest 文件的快捷菜单,选择“打开方式”,然后选择“应用程序清单设计器”**。
在**“应用程序清单设计器”中,选择“打包”选项卡,然后选择“选择证书”**按钮。
在**“选择证书”对话框中,展开“配置证书”**列表,然后选择以下选项之一:
从证书存储中选取
从操作系统的证书存储中选取Personal证书之一。从文件中选择
从文件系统中选取现有证书文件。创建测试证书
使用所选择的Publisher ID 创建证书。还可以创建密码。
无论选择哪个选项,证书文件都会添加到项目中,并相应地更新 PackageCertificateThumbprint 和 PackageCertificateKeyFile 项目属性。
续订证书
Visual Studio 生成的默认证书将在一年后的证书创建日期到期。在证书过期之前,必须使用应用程序清单设计器重新生成证书,或如前面的过程所述提供不同的有效证书。
续订证书
在**“解决方案资源管理器”中,打开 .appxmanifest 文件的快捷菜单,选择“打开方式”,然后选择“应用程序清单设计器”**。
在**“应用程序清单设计器”中,选择“打包”选项卡,然后选择“选择证书”**按钮。
在**“选择证书”对话框中,展开“配置证书”列表,然后选择“创建测试证书”**。
在**“创建测试证书”对话框中,单击“确定”**按钮。
Visual Studio 会重新生成该证书,它具有新的到期日期。
删除或导出证书
您可能需要删除或导出已过期或者已被破坏、损坏或被另一个证书替换的证书。有关如何删除或导出证书的信息,请参见如何使用证书控制台。
决定希望 Visual Studio 执行的验证检查
在打包过程中,Visual Studio 会通过执行大量验证检查来验证证书。
在某些情况下,您可能需要更准确地控制所使用的证书,从而进一步确认您希望 Visual Studio 对证书运行的验证检查。通过将 MSBuild 属性 EnableSigningChecks 设置为**“False”**,可以实现此目的。
如果将该属性设置为 False,则 Visual Studio 将仅执行下列验证检查:
验证私钥是否存在。
验证**“增强型密钥用法”属性的值是否包含“代码签名”**。
验证证书是否处于活动状态、尚未过期并且未被撤消。
如果将该属性设置为 True(默认值),则 Visual Studio 会运行下列其他检查。
验证**“基本约束”**扩展是否存在以及它的值,该值必须是 Subject Type=End Entity 或未指定。
验证**“KeyUsage (KU)”属性的值,该值必须是“Unset”或“DigitalSignature”**。
修改已安装的应用程序
如果修改已安装程序包中的任何文件,签名验证可能会阻止该应用程序启动。若要修改程序包,请在原始源文件中进行更改,然后重新部署已修改的程序包。