证书和应用服务环境 v2

重要

本文介绍用于独立应用服务计划的应用服务环境 v2。 应用服务环境 v2 将于 2024 年 8 月 31 日停用。 应用服务环境有新版本,此版本更易于使用并在更强大的基础结构上运行。 若要详细了解该新版本,请先参阅应用服务环境简介。 如果你当前正在使用应用服务环境 v2,请按照本文中的步骤迁移到新版本。

从 2024 年 1 月 29 日起,无法再使用任何可用方法(包括 ARM/Bicep 模板、Azure 门户、Azure CLI 或 REST API)创建新的应用服务环境 v2 资源。 必须在 2024 年 8 月 31 日之前迁移到应用服务环境 v3,以防止资源删除和数据丢失。

应用服务环境 (ASE) 是在 Azure 虚拟网络 (VNet) 中运行的 Azure 应用服务的部署。 可以使用能够通过 Internet 访问的应用程序终结点或者 VNet 中的应用程序终结点来部署 ASE。 如果使用可通过 Internet 访问的终结点部署 ASE,则该部署称为外部 ASE。 如果使用 VNet 中的终结点部署 ASE,则该部署称为 ILB ASE。 可以在创建和使用 ILB ASE 文档中详细了解 ILB ASE。

ASE 是单租户系统。 由于它是单一租户,某些只能在 ASE 中使用的功能不能在多租户应用服务中使用。

ILB ASE 证书

如果使用的是外部 ASE,则可以通过 <appname>.<asename>.p.chinacloudsites.cn 访问应用。 默认情况下,所有 ASE 甚至 ILB ASE,都是使用遵循该格式的证书创建的。 创建 ILB ASE 后,可以基于创建 ILB ASE 时指定的域名来访问应用。 为使应用支持 TLS,需要上传证书。 可通过三种方式获取有效的 TLS/SSL 证书:使用内部证书颁发机构、向外部颁发者购买证书或使用自签名证书。

可以使用两个选项配置 ILB ASE 的证书。 可为 ILB ASE 设置通配符默认证书,或者在 ASE 中的单个 Web 应用上设置证书。 无论做出哪种选择,都必须正确配置以下证书属性:

  • 使用者: 对于通配符 ILB ASE 证书,此属性必须设置为 *.[根域]。 如果为应用创建证书,则此属性应是 [应用名称].[根域]
  • 使用者可选名称: 此属性必须同时包括通配符 ILB ASE 证书的 *.[根域] 和 *.scm.[根域]。 如果为应用创建证书,则此属性应是 [应用名称].[根域] 和 [应用名称].scm.[根域]

作为第三种变体,可以创建在证书 SAN 中包含所有应用名称的 ILB ASE 证书,而不使用通配符引用。 此方法的问题在于,需要事先知道要放入 ASE 的应用名称,或者需要不断更新 ILB ASE 证书。

将证书上传到 ILB ASE

在门户中创建 ILB ASE 之后,必须为 ILB ASE 设置证书。 在设置证书之前,ASE 将显示一个横幅,指出未设置证书。

上传的证书必须是 .pfx 文件。 上传证书后,大约有 20 分钟的时间延迟,然后才能使用证书。

无法在门户中一次性创建 ASE 并上传证书,即使在一个模板中也无法做到这一点。 作为单独的操作,可以使用从模板创建 ASE 文档中所述的模板上传证书。

若要快速创建自签名证书用于测试,可以使用以下 PowerShell 代码:

$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal-contoso.com","*.scm.internal-contoso.com"

$certThumbprint = "cert:\localMachine\my\" + $certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText

$fileName = "exportedcert.pfx"
Export-PfxCertificate -cert $certThumbprint -FilePath $fileName -Password $password

创建自签名证书时,需确保使用者名称的格式为 CN={ASE_NAME_HERE}_InternalLoadBalancingASE。

应用程序证书

在 ASE 中托管的应用可以使用多租户应用服务支持的以应用为中心的证书功能。 这些功能包括:

  • SNI 证书
  • 基于 IP 的 SSL,仅在外部 ASE 中受支持。 ILB ASE 不支持基于 IP 的 SSL。
  • KeyVault 托管的证书

TLS 设置

可在应用级别配置 TLS 设置。

专用客户端证书

一个常见用例是将应用配置为客户端-服务器模型中的客户端。 如果使用专用 CA 证书保护服务器,则需要将客户端证书上传到应用。 以下说明介绍如何将证书加载到运行应用的辅助角色的信任存储中。 如果将证书加载到一个应用,则可以将其用于同一应用服务计划中的其他应用,而无需再次上传该证书。

将证书上传到 ASE 中的应用:

  1. 生成证书的 .cer 文件。

  2. 在 Azure 门户中转到需要该证书的应用

  3. 转到该应用中的 SSL 设置。 单击“上传证书”。 选择“公共”。 选择“本地计算机”。 提供一个名称。 浏览并选择你的 .cer 文件。 选择“上传”。

  4. 复制指纹。

  5. 转到“应用程序设置”。 创建应用设置 WEBSITE_LOAD_ROOT_CERTIFICATES,并使用指纹作为值。 如果有多个证书,可将其放到同一个设置中,并用逗号分隔(不要包含空格),例如

    84EC242A4EC7957817B8E48913E50953552DAFA6,6A5C65DC9247F762FE17BF8D4906E04FE6B31819

配置了该设置的应用所在的同一个应用服务计划中的所有应用都可以使用该证书。 如果需要将该证书提供给不同应用服务计划中的应用使用,则需要在该应用服务计划中的应用上重复“应用设置”操作。 若要检查是否设置了证书,请转到 Kudu 控制台,并在 PowerShell 调试控制台中发出以下命令:

dir cert:\localmachine\root

若要执行测试,可以创建自签名证书,并使用以下 PowerShell 命令生成 .cer 文件:

$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal-contoso.com","*.scm.internal-contoso.com"

$certThumbprint = "cert:\localMachine\my\" + $certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText

$fileName = "exportedcert.cer"
export-certificate -Cert $certThumbprint -FilePath $fileName -Type CERT