使用 Azure Key Vault 为包签名

在 Visual Studio 2022 版本 17.8 预览版 2 及更高版本中,可使用 Azure 密钥保管库中存储的证书对 UWP 和桌面应用程序包进行签名。 此工具为将应用程序包摘要(哈希)发送给 Azure 密钥保管库,让你可以使用选择的证书进行加密签名。 然后,已签名的摘要返回并附加到你在本地的包。

重要

此过程是安全的。 证书的私钥不会离开 Azure 密钥保管库。

先决条件

  • 一个 Azure 帐户。 如果还没有 Azure 帐户,请在此处开始。
  • 一个 Azure Key Vault。 有关详细信息,请参阅创建 Key Vault
  • 一个导入到 Azure Key Vault 的有效包签名证书。 Azure Key Vault 生成的默认证书不能用于代码签名。 要详细了解如何创建包签名证书,请参阅为包签名创建证书

将证书导入 Key Vault

将证书添加到 Key Vault 非常简单。 在本例中,我们添加一个名为 UwpSigningCert.pfx 的有效 UWP 代码签名证书

  1. 在密钥保管库属性页中,选择“证书”。
  2. 单击“生成/导入”。
  3. 在“创建证书”屏幕上,选择以下值:
    • 证书创建方法:导入
    • 证书名称:UwpSigningCert
    • 上传证书文件:UwpSigningCert.pfx
    • 加密证书:如果证书受密码保护,请在“密码”字段提供。
  4. 单击“创建”。

注意

Windows 将不信任该自签名证书,除非该证书已导入且受到管理员的信任。 确保所有证书(包括自签名证书)安全。

为 Key Vault 配置访问策略

可使用访问策略控制谁有权访问 Key Vault 的内容。 Key Vault 访问策略分别授予对密钥、机密和证书的权限。 可以仅授予用户对密钥的访问权限,而不授予对机密的访问权限。 在保管库级别管理密钥、机密或证书的访问权限。 有关详细信息,请参阅 Azure Key Vault 安全性

注意

在 Azure 订阅中创建 Key Vault 时,它会自动与订阅的 Azure Active Directory 租户相关联。 任何尝试管理或检索 Key Vault 中的内容的用户都必须经过 Azure AD 授权。

  1. 在 Key Vault 属性页上,选择“访问策略”
  2. 选择“+ 添加访问策略”
  3. 单击“证书权限”下拉列表,然后勾选“证书管理操作”下的“获取”和“列出”框
  4. 单击“机密权限”下拉列表,然后勾选“机密管理操作”下的“获取”和“列出”框
  5. 单击“选择主体”,搜索要向其授予访问权限的用户,然后单击“选择”
  6. 单击“添加”。
  7. 请确保单击“保存”来保存所作的更改

注意

建议不要授权用户直接访问 Key Vault。 理想情况下,应将用户添加到 Azure AD 组,然后为该组授予对 Key Vault 的访问权限。

从 Visual Studio 中的 Key Vault 选择一个证书

通过 Visual Studio 中的“创建应用包”向导,可选择要用于对应用包进行签名的证书。 可通过 Azure Key Vault 选择包签名证书。 必须提供包含该证书的 Key Vault 的 URI,而且 Visual Studio 中授权的 Microsoft 帐户必须具有访问它的适当权限。

  1. 在 Visual Studio 中打开“UWP 应用程序”项目或“Windows 应用程序打包项目”桌面
  2. 选择“发布”->“包”->“创建应用包…”,打开“创建应用包”向导
  3. 在“选择分发方法”页面上,选择“旁加载”
  4. 在“选择签名方法”页面上,单击“从 Azure Key Vault 中选择…”
  5. 在“从 Azure Key Vault 选择证书”对话框出现后,使用帐户选取器选择已为其配置访问策略的帐户
  6. 输入 Key Vault 的 URI。 URI 可在 Key Vault 的“概述”页面上找到,它通过 DNS 名称进行标识
  7. 单击“查看元数据”按钮
  8. 证书加载完毕后,从列表中选择所需的证书,例如 UwpSigningCert
  9. 单击“确定”。

使用 Azure Key Vault 中的密码来解密证书

如果使用受本地密码保护的证书 (.pfx) 来签名应用包,则可能很难管理用来解密它的密码。 在“创建应用包”向导中导入证书时,系统将提示你手动输入密码。 此外,也可选择 Azure Key Vault 中的密码。

  1. 在 Visual Studio 中打开“UWP 应用程序”项目或“Windows 应用程序打包项目”桌面
  2. 选择“发布”->“包”->“创建应用包…”,打开“创建应用包”向导
  3. 在“选择分发方法”页面上,选择“旁加载”
  4. 在“选择签名方法”页面上,单击“从文件中选择…”
  5. 在“证书受密码保护”对话框出现后,单击“从 Key Vault 中选择密码”
  6. 在“从 Azure Key Vault 选择密码”对话框出现后,使用帐户选取器选择已为其配置访问策略的帐户
  7. 输入 Key Vault 的 URI。 URI 可在 Key Vault 的“概述”页面上找到,它通过 DNS 名称进行标识
  8. 单击“查看元数据”按钮
  9. 密码加载完毕后,从列表中选择所需的密码,例如 UwpSigningCertPassword
  10. 单击“确定”。

在 CI/CD 方案中启用登录

若要在 CI/CD 方案中启用登录,需要将管道配置为使用 DefaultAzureCredential 才能使用 Azure 密钥保管库进行身份验证。 如果具有相应权限,DefaultAzureCredential 会尝试使用管道代理的身份来访问密钥保管库。 或者,可以指定要用于身份验证的服务主体或托管标识。