你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 应用服务中添加和管理 TLS/SSL 证书

可以添加数字安全证书以用于应用程序代码,或帮助保护 Azure 应用服务中的自定义域名系统(DNS)名称。 应用服务提供高度可缩放的、可自我修补的 Web 托管服务。 证书当前称为传输层安全性(TLS)证书。 它们以前称为安全套接字层(SSL)证书。 这些专用或公共证书可帮助你保护 Internet 连接。 证书对浏览器、访问的网站和网站服务器之间发送的数据进行加密。

下表列出了在应用服务中添加证书的选项。

选项 说明
创建免费应用服务托管证书 如果需要提高应用服务中 自定义域 的安全性,则免费且易于使用的专用证书。
导入应用服务证书 Azure 管理专用证书。 它结合了自动化证书管理的简单性以及续订和导出选项的灵活性。
从 Azure Key Vault 导入证书 如果使用 Key Vault 管理 PKCS12 证书,则很有用。 请参阅私有证书要求
上传私有证书 如果已有来自非Microsoft提供程序的专用证书,可以上传它。 请参阅私有证书要求
上传公用证书 公用证书不用于保护自定义域,但可以将其加载到代码中(如果需要它们来访问远程资源)。

先决条件

私有证书要求

免费应用服务托管证书应用服务证书已满足应用服务的要求。 如果选择将私有证书上传或导入到应用服务,则证书必须满足以下要求:

  • 作为 受密码保护的 .pfx 文件导出,使用三重 DES 进行加密。
  • 包含至少 2,048 位长的私钥。
  • 包含证书链中的所有中间证书和根证书。

若要帮助保护 TLS 绑定中的自定义域,证书必须满足以下额外要求:

  • 包含服务器身份验证的 扩展密钥用法 (OID = 1.3.6.1.5.5.7.3.1)。
  • 由受信任的证书颁发机构签名。

注意

椭圆曲线加密(ECC)证书 适用于应用服务,但本文未介绍。 有关创建 ECC 证书的具体步骤,请咨询证书颁发机构。

将专用证书添加到应用后,该证书将存储在绑定到应用服务计划的资源组、区域和作系统(OS)组合的部署单元中。 在内部,它称为 webspace。 通过此操作,同一资源组、区域和操作系统组合中的其他应用也可以访问该证书。 上传或导入到应用服务的专用证书与同一部署单元中的应用服务共享。

每个 Web 空间最多可添加 1,000 个专用证书。

创建免费托管证书

免费应用服务托管证书是一种帮助保护应用服务中的自定义 DNS 名称的一个包包解决方案。 应用服务无需执行任何作即可管理此 TLS/SSL 服务器证书。

在创建免费托管证书之前,请确保 满足应用的先决条件

DigiCert 颁发免费证书。 对于某些域,必须通过创建具有该值0 issue digicert.com证书颁发机构授权(CAA)域记录来显式允许 DigiCert 作为证书颁发者。

Azure 可以完全管理证书,因此托管证书(包括根颁发者)的任何方面都可以随时更改。 证书续订会同时更改公钥和私钥部分。 所有这些证书更改都不受控制。 请确保避免强依赖性,并且不要将测试证书 绑定 到托管的证书或证书层次结构的任何部分。 如果需要证书固定行为,请使用本文中的其他任何可用方法将证书添加到自定义域。

免费证书具有以下限制:

  • 不支持通配符证书。
  • 不支持使用已计划弃用和移除的证书指纹作为客户端证书。
  • 不支持专用 DNS。
  • 不可导出。
  • 应用服务环境中不受支持。
  • 仅支持字母数字字符、短划线和句点(.)。
  • 支持长度高达 64 个字符的自定义域。
  • 必须具有指向你的 Web 应用的 IP 地址的 A 记录。
  • 必须位于可公开访问的应用上。
  • 与 Azure 流量管理器集成的根域不支持。
  • 必须满足上述所有条件才能成功颁发和续订证书。
  1. Azure 门户中的左窗格中,选择 “应用服务><”应用名称>

  2. 在应用的左窗格中,选择“ 证书”。 在 “托管证书 ”窗格中,选择“ 添加证书”。

    显示应用窗格的屏幕截图,其中选择了“证书”、“托管证书”和“添加证书”。

  3. 选择免费证书的自定义域,然后选择“验证”。 验证完成后,选择“ 添加”。 只能为每个受支持的自定义域创建一个托管证书。

    作完成后,证书将显示在 托管证书 列表中。

    显示“托管证书”窗格的屏幕截图,其中列出了新证书。

  4. 若要为此证书的自定义域提供安全性,必须创建证书绑定。 在 Azure 应用服务中使用 TLS/SSL 绑定保护自定义 DNS 名称

导入应用服务证书

若要导入应用服务证书,请先购买并配置应用服务证书,然后按照此处的步骤进行操作。

  1. Azure 门户中的左窗格中,选择 “应用服务><”应用名称>

  2. 在应用的左窗格中,选择“ 证书>自带证书”(.pfx)>添加证书

  3. “源”下,选择“ 导入应用服务证书”。

  4. 应用服务证书下,选择创建的证书。

  5. “证书友好名称”下,为证书提供应用中的名称。

  6. 选择“验证”。 验证成功后,请选择“添加”。

    显示应用管理页面的屏幕截图,其中选择了“证书”、“自带证书(.pfx)”和“导入应用服务证书”。“添加私钥证书”窗格中显示“验证”。

    作完成后,证书会显示在 “自带证书”(.pfx) 列表中。

    显示“自带证书 (.pfx)”窗格的屏幕截图,其中列出了已购买的证书。

  7. 若要帮助使用此证书保护自定义域,必须创建证书绑定。 在 Azure 应用服务中使用 TLS/SSL 绑定保护自定义 DNS 名称

导入来自 Key Vault 的证书

如果使用 Key Vault 管理证书,则可以从 Key Vault 将 PKCS12 证书导入应用服务(如果满足 要求)。

授权应用服务读取保管库

默认情况下,应用服务资源提供程序无权访问密钥保管库。 若要将密钥保管库用于证书部署,必须授权资源提供程序(应用服务)对密钥保管库的读取访问权限。 可以使用访问策略或基于角色的访问控制(RBAC)授予访问权限。

资源提供程序 服务主体应用 ID / 被分配者 Key Vault RBAC 角色
Azure 应用服务或 Microsoft.Azure.WebSites - abfa0a7c-a6b6-4736-8310-5855508787cd 适用于 Azure 云服务

- 适用于政府的 Azure 云服务的 6a02c803-dafd-4136-b4c3-5a6f318b4714
证书用户

服务主体应用 ID 或被分配者值是应用服务资源提供程序的 ID。 使用 RBAC 授予访问权限时,服务主体应用 ID 的相应对象 ID 特定于租户。 若要了解如何使用访问策略为应用服务资源提供程序授权 Key Vault 权限,请参阅 使用 Azure 基于角色的访问控制提供对 Key Vault 密钥、证书和机密的访问权限

az role assignment create --role "Key Vault Certificate User" --assignee "abfa0a7c-a6b6-4736-8310-5855508787cd" --scope "/subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{key-vault-name}"

将保管库中的证书导入到应用

  1. Azure 门户中的左窗格中,选择 “应用服务><”应用名称>

  2. 在应用的左窗格中,选择“ 证书>自带证书”(.pfx)>添加证书

  3. “源”下,选择 “从 Key Vault 导入”。

  4. 选择“选择密钥保管库证书”。

    显示应用管理页面的屏幕截图,其中选中了“证书”、“自带证书(.pfx)”和“从 Key Vault 导入”。

  5. 若要帮助选择证书,请使用下表:

    设置 说明
    订阅 与密钥保管库关联的订阅。
    密钥保管库 具有要导入的证书的密钥保管库。
    证书 从此列表中,选择保管库中的 PKCS12 证书。 保管库中的所有 PKCS12 证书都已通过其指纹列出,但在应用服务中并非支持所有证书。
  6. 完成选择后,选择“验证”>,然后选择“添加”。

    作完成后,证书会显示在 “自带证书”(.pfx) 列表中。 如果导入失败并出现错误,则证书不满足应用服务的要求

    显示“自带证书 (.pfx)”窗格的屏幕截图,其中列出了导入的证书。

    如果使用新证书更新 Key Vault 中的证书,应用服务会在 24 小时内自动同步证书。

  7. 若要帮助使用此证书保护自定义域,必须创建证书绑定。 在 Azure 应用服务中使用 TLS/SSL 绑定保护自定义 DNS 名称

上传私有证书

从证书提供程序处获取证书后,请按照本部分中的步骤为应用服务准备好证书。

合并中间证书

如果证书颁发机构在证书链中提供了多个证书,则必须按照相同的顺序合并证书。

  1. 在文本编辑器中,打开收到的所有证书。

  2. 若要存储合并证书,请创建一个名为 mergedcertificate.crt 的文件。

  3. 将每个证书的内容复制到此文件中。 请确保遵循证书链指定的证书序列。 从证书开始,以根证书结尾,例如:

    -----BEGIN CERTIFICATE-----
    <your entire Base64 encoded SSL certificate>
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    <The entire Base64 encoded intermediate certificate 1>
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    <The entire Base64 encoded intermediate certificate 2>
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    <The entire Base64 encoded root certificate>
    -----END CERTIFICATE-----
    

将合并的专用证书导出到 .pfx

现在,使用用于生成证书请求的私钥导出合并的 TLS/SSL 证书。 如果使用 OpenSSL 生成了证书请求,则创建了私钥文件。

OpenSSL v3 将默认密码从 3DES 更改为 AES256。 使用命令行 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg SHA1 替代更改。

OpenSSL v1 使用 3DES 作为默认值,因此支持生成的 .pfx 文件,而无需进行任何特殊修改。

  1. 若要将证书导出到 .pfx 文件,请运行以下命令。 将占位符 <private-key-file> 和 merged-certificate-file< 分别替换为私钥和合并证书文件的路径。

    openssl pkcs12 -export -out myserver.pfx -inkey <private-key-file> -in <merged-certificate-file>  
    
  2. 出现提示时,请指定导出操作的密码。 稍后将 TLS/SSL 证书上传到应用服务时,必须提供此密码。

  3. 如果使用 IIS 或 Certreq.exe 生成证书请求,请将证书安装到本地计算机,然后将 证书导出到 .pfx 文件

将证书上传到应用服务

现在,你已准备好将证书上传到应用服务。

  1. Azure 门户中的左窗格中,选择 “应用服务><”应用名称>

  2. 在应用的左窗格中,选择“证书>自带证书”(.pfx)>上传证书(.pfx)。

    显示应用管理页面的屏幕截图,其中选中了“证书”、“自带证书(.pfx)”和“上传证书 .pfx”。

  3. 若要帮助上传 .pfx 证书,请使用下表:

    设置 说明
    PFX 证书文件 选择 .pfx 文件。
    证书密码 输入导出 .pfx 文件时创建的密码。
    证书易记名称 Web 应用中显示的证书名称。
  4. 完成选择后,选择“验证”>,然后选择“添加”。

    作完成后,证书会显示在 “自带证书”(.pfx) 列表中。

    显示“自带证书”窗格的屏幕截图,其中列出了已上传的证书。

  5. 若要为此证书的自定义域提供安全性,必须创建证书绑定。 在 Azure 应用服务中使用 TLS/SSL 绑定保护自定义 DNS 名称

上传公用证书

支持使用 .cer 格式的公用证书。

将公共证书上传到应用后,它只能由上载到的应用访问。 公共证书必须上传到需要访问的每个 Web 应用。 有关特定于应用服务环境的方案,请参阅 证书和应用服务环境的文档

每个应用服务计划最多可以上传 1,000 个公共证书。

  1. Azure 门户中的左窗格中,选择 “应用服务><”应用名称>

  2. 在应用的左窗格中,选择 “证书>公钥证书”(.cer)>“添加证书”。

  3. 若要帮助上传 .cer 证书,请使用下表:

    设置 说明
    .cer证书文件 选择 .cer 文件。
    证书易记名称 Web 应用中显示的证书名称。
  4. 完成后,选择“ 添加”。

    显示应用管理页的屏幕截图。它显示要上传的公钥证书及其名称。

  5. 上传证书后,复制证书指纹,查看是否使证书可访问

续订即将到期的证书

在证书过期之前,请确保将续订的证书添加到应用服务。 更新其过程依赖于证书类型的任何证书绑定。 例如,从 Key Vault 导入的证书(包括应用服务证书)每 24 小时自动同步到应用服务,并在你续订证书时更新 TLS/SSL 绑定。

对于上传的证书,没有自动绑定更新。 根据你的方案,查看相应的部分:

续订上传的证书

替换过期证书时,使用新证书更新证书绑定的方式可能会对用户体验产生不利影响。 例如,删除绑定时,入站 IP 地址可能会更改,即使该绑定基于 IP 也是如此。 在续订已进行基于 IP 的绑定的证书时,此结果尤其有效。

若要避免应用 IP 地址发生更改,并避免因 HTTPS 错误导致应用停机,请执行以下步骤:

  1. 上传新证书

  2. 转到应用的“自定义域”页,选择“...”按钮,然后选择“更新绑定”。

  3. 选择新证书,然后选择“ 更新”。

  4. 删除现有证书。

续订从 Key Vault 导入的证书

若要续订应用服务证书,请参阅续订应用服务证书

若要续订从 Key Vault 导入到应用服务的证书,请参阅 “续订 Azure Key Vault 证书”。

在密钥保管库中续订证书后,应用服务会自动同步新证书并在 24 小时内更新任何适用的证书绑定。 若要手动同步,请执行以下步骤:

  1. 转到应用的“证书”页。

  2. 在“自带证书(.pfx)”下,为导入的密钥保管库证书选择“...”按钮,然后选择“同步”。

常见问题解答

如何自动执行向应用添加自带证书的过程?

是否可以在应用中将专用 CA 证书用于入站 TLS?

可以将专用证书颁发机构 (CA) 证书用于 应用服务环境版本 3 中的入站 TLS。 在应用服务(多租户)中无法执行此操作。 有关应用服务多租户与单租户的详细信息,请参阅 应用服务环境 v3 和应用服务公共多租户比较

我可以在我的应用中使用私有 CA 客户端证书拨打电话吗?

此功能仅适用于多租户应用服务中的 Windows 容器应用。 可以在 应用服务环境版本 3 中使用基于代码的应用和基于容器的应用的专用 CA 客户端证书进行出站调用。 有关应用服务多租户与单租户的详细信息,请参阅 应用服务环境 v3 和应用服务公共多租户比较

是否可以在应用服务受信任的根存储中加载专用 CA 证书?

可以将自己的 CA 证书加载到 应用服务环境版本 3 中受信任的根存储中。 不能修改应用服务(多租户)中受信任的根证书列表。 有关应用服务多租户与单租户的详细信息,请参阅 应用服务环境 v3 和应用服务公共多租户比较

应用服务证书是否可以用于其他服务?

是的。 可以将应用服务证书导出并使用 Azure 应用程序网关或其他服务。 有关详细信息,请参阅博客文章 :创建应用服务证书的本地 PFX 副本