应用服务环境是在 Azure 虚拟网络中运行的 Azure 应用服务的部署。 可以使用能够通过 Internet 访问的应用程序终结点或者虚拟网络中的应用程序终结点来部署 ASE。 如果使用可通过 Internet 访问的终结点来部署应用服务环境,则该部署称为外部应用服务环境。 如果使用虚拟网络中的终结点来部署应用服务环境,则该部署称为 ILB 应用服务环境。 可以在创建和使用 ILB 应用服务环境文档中详细了解 ILB 应用服务环境。
应用程序证书
托管在应用服务环境中的应用程序支持以下以应用为中心的证书功能,这些功能在多租户应用服务中也可用。 有关上传和管理这些证书的要求和说明,请参阅在 Azure 应用服务中添加 TLS/SSL 证书。
在将证书添加到应用服务应用或函数应用后,即可使用它来保护自定义域名或在应用程序代码中使用它。
限制
托管在应用服务环境中的应用不支持应用服务托管证书。
TLS 设置
可在应用级别配置 TLS 设置。
私人客户端场景的根证书
当应用充当连接到使用专用证书颁发机构(CA)证书保护的服务的客户端时,需要添加根证书来建立信任。 应用服务环境 v3 提供了两种管理根证书的方法:
- 根证书 API (建议):所有应用的全环境管理
- 专用客户端证书:使用应用程序设置按应用进行配置
选择正确的方法
| 方法 | Scope | 使用时 | 限制 |
|---|---|---|---|
| 根证书 API | 应用服务环境中的所有应用 | - 管理多个需要同一根证书的应用 - 需要集中式证书管理 - 你正在部署具有基础结构即代码的新环境 |
- 需要停止运行并重新启动现有应用以加载新证书 - 需要 API/CLI/IaC 工具(目前在 Azure 门户中不可用) |
| 专用客户端证书 | 单个应用服务计划中的应用 | - 你只需要少数应用程序的证书 - 您更喜欢使用门户进行配置 - 不同的应用需要不同的根证书 |
- 仅限 Windows 编程应用 - 必须单独配置每个应用服务计划 - 在应用代码外部不可用的证书(不能用于容器注册表身份验证或前端 TLS 验证) |
一般建议将根证书 API 用于新部署,以及跨多个应用管理证书时。 它提供更好的可伸缩性、自动化支持,适用于 Windows 和 Linux 应用。
根证书 API
根证书 API 允许以编程方式将根证书添加到应用服务环境 v3,使其在启动期间可供所有应用使用。 根证书是用于标识根证书颁发机构(CA)的公共证书,对于建立安全通信信任至关重要。 通过将根证书添加到应用服务环境,该环境中托管的所有应用都将其安装在其根存储中,确保与使用专用或企业 CA 颁发的证书的内部服务或 API 的安全通信。
此功能适用于应用服务环境 v3 中基于 Windows 和 Linux 的应用。 通过此 API 添加的根证书在启动时会自动注入到应用的信任存储中,无需每个应用配置并简化证书生命周期管理。
重要注意事项
- 可以使用 REST API、Azure CLI、ARM 模板、Bicep 或 Terraform 将证书添加到应用服务环境。
- 如果您在应用服务环境中添加证书,而该环境中有现有或正在运行的应用程序,您必须 停止 这些应用程序,然后 启动 它们,以便证书存储更新为新的根证书。 建议在创建应用之前添加所有证书,以便无需单独停止和启动应用。
- 停止和启动操作与重启应用程序不同。 必须使用 Azure 门户、Azure CLI 或 REST API 中提供的专用停止和启动命令。
- 启动和停止应用程序会在应用程序停止时导致短暂的中断。
- 如果有多个应用并且想要自动执行此过程,可以使用 Azure CLI 或 REST API。
- 在证书添加过程中,您必须在请求中提供整个证书 Blob。 无法直接上传 .cer 文件。
添加根证书
若要将根证书添加到应用服务环境,请使用以下方法之一:
PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
Content-Type: application/json
{
"location": "{location}",
"properties": {
"blob": "{raw certificate blob}",
"isRoot": true
}
}
替换以下占位符:
-
{subscriptionId}:Azure 订阅 ID -
{resourceGroupName}:包含应用服务环境的资源组 -
{aseName}:应用服务环境的名称 -
{certificateName}:证书资源的名称 -
{location}:部署应用服务环境的 Azure 区域 -
{raw certificate blob}:根证书中包含的原始证书数据 Blob
删除根证书
若要从应用服务环境中删除根证书,请执行以下作:
DELETE https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
检索特定证书
若要从应用服务环境检索特定根证书,请执行以下作:
GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates/{certificateName}?api-version=2024-04-01
检索所有公共证书
若要从应用服务环境检索所有公共证书,请执行以下作:
GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/hostingEnvironments/{aseName}/publicCertificates?api-version=2024-04-01
停止和启动应用
使用现有应用将根证书添加到应用服务环境后,必须停止并启动每个应用以更新证书存储。
私有客户端证书(针对每个应用配置)
注意
对于大多数方案,请使用 根证书 API 而不是此方法。 根证书 API 为 Windows 和 Linux 应用提供环境范围的证书管理,而此方法仅限于单个应用服务计划中的 Windows 代码应用。
如果需要仅为特定应用配置根证书,或者首选使用 Azure 门户,可以使用专用客户端证书方法。 此方法将证书上传到单个应用,并将其提供给同一应用服务计划中的应用。
重要
只有 Windows 代码应用中的自定义代码才支持专用客户端证书。 应用外部不支持专用客户端证书。 这在某些场景下会限制使用,例如使用专用证书从注册表拉取应用容器映像,以及使用专用证书通过前端服务器进行 TLS 验证。
按照以下步骤将证书(.cer 文件)上传到应用服务环境中的应用。 可以从证书导出 .cer 文件。 出于测试目的,末尾有一个 PowerShell 示例,用于生成临时自签名证书:
在 Azure 门户中转到需要该证书的应用
转到应用中的“证书”。 选择“公钥证书(.cer)”。 选择“添加证书”。 提供一个名称。 浏览并选择你的 .cer 文件。 选择“上传”。
复制指纹。
转到“配置”“应用程序设置”。 创建应用设置 WEBSITE_LOAD_ROOT_CERTIFICATES,并使用指纹作为值。 如果有多个证书,可将其放到同一个设置中,并用逗号分隔(不要包含空格),例如
84EC242A4EC7957817B8E48913E50953552DAFA6,6A5C65DC9247F762FE17BF8D4906E04FE6B31819
该证书可供应用服务计划中的所有应用使用,该应用配置了该设置,但依赖于专用 CA 证书的所有应用都应配置应用程序设置以避免计时问题。
如果需要它可用于其他应用服务计划中的应用,则需要对该应用服务计划中的应用重复此应用设置操作。 若要检查是否设置了证书,请转到 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
$fileName = "exportedcert.cer"
Export-Certificate -Cert $certThumbprint -FilePath $fileName -Type CERT
专用服务器证书 (TLS/SSL 绑定)
注意
本部分介绍 TLS/SSL 绑定的服务器证书,这与前面讨论的根证书不同。 服务器证书用于使用 HTTPS 保护应用的自定义域,而根证书为出站客户端连接建立信任。
如果应用充当客户端-服务器模型中的服务器(位于反向代理后面或直接与专用客户端一起使用),并且你使用的是专用 CA 证书,则你需要将服务器证书(.pfx 文件)连同完整证书链一起上传到应用,然后将证书绑定到自定义域。 由于基础结构专用于应用服务环境,因此完整证书链将添加到服务器的信任存储中。 只需上传证书一次即可将它用于同一应用服务环境中的应用。
注意
如果在 2023 年 10 月 1 日之前上传了证书,则需要重新加载并重新绑定证书,以便将完整证书链添加到服务器。
遵循使用 TLS/SSL 保护自定义域教程将专用 CA 根证书上传/绑定到应用服务环境中的应用。
后续步骤
- 有关如何在应用程序代码中使用证书的信息