在 Azure 容器应用中配置客户端证书身份验证

Azure 容器应用支持客户端证书身份验证(也称为相互 TLS 或 mTLS),后者允许通过双向身份验证访问容器应用。 本文介绍如何在 Azure 容器应用中配置客户端证书授权。

使用客户端证书时,TLS 证书会在客户端和容器应用之间交换,以验证身份并加密流量。 客户端证书通常用于“零信任”安全模型,以便进行组织内客户端访问授权。

例如,对于管理敏感数据的容器应用,你可以要求客户端证书。

当 PKCS12 格式的客户端证书由受信任的证书颁发机构 (CA) 颁发或自签名时,容器应用会接受这些证书。

配置客户端证书授权

若要配置对客户端证书的支持,请在容器应用模板中设置 clientCertificateMode 属性。

此属性可以设置为下列值之一:

  • require:对容器应用的所有请求都需要客户端证书。
  • accept:客户端证书是可选的。 如果未提供客户端证书,则仍会接受请求。
  • ignore:忽略客户端证书。

如果设置了 requireaccept,入口会将客户端证书传递给容器应用。

以下 ARM 模板示例将入口配置为要求对容器应用的所有请求都必须提供客户端证书。

{
  "properties": {
    "configuration": {
      "ingress": {
        "clientCertificateMode": "require"
      }
    }
  }
}

备注

可以直接在入口属性上设置 clientCertificateMode 。 它不可用作 CLI 中的显式选项,但可以使用 Azure CLI 修补应用。

在运行以下命令之前,请确保用自己的值替换被 <> 包围的占位符。

获取容器应用的 Azure 资源管理器 (ARM) ID:

APP_ID=$(az containerapp show \
  --name <APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --query id \
  --output tsv)

修补应用中的clientCertificateMode属性:

az rest \
  --method patch \
  --url "https://management.chinacloudapi.cn/$APP_ID?api-version=<API_VERSION>" \
  --body '{
    "properties": {
      "configuration": {
        "ingress": {
          "clientCertificateMode": "require"
        }
      }
    }
  }'

备注

请务必使用支持此功能的有效稳定 API 版本。 例如,将命令中的API_VERSION<替换为 >2025-01-01 或其他受支持的版本。

客户端证书模式和标头格式

clientCertificateMode 的值根据为容器应用来管理证书需要提供的内容而有所不同:

  • 当设置require 时,客户端必须提供证书。
  • 设置accept时,证书是可选的。 如果客户端提供的是证书,则传递到 X-Forwarded-Client-Cert 标头中的应用,作为以分号分隔的列表。

示例 X-Forwarded-Client-Cert 标头值

以下示例是应用可能接收的 X-Forwarded-Client-Cert 标头的示例值:

Hash=<HASH_VALUE>;Cert="-----BEGIN CERTIFICATE-----<CERTIFICATE_VALUE>";Chain="-----BEGIN CERTIFICATE-----<CERTIFICATE_VALUE>";

标题字段细目

领域 DESCRIPTION 如何使用
Hash 客户端证书的 SHA-256 指纹。 使用指纹标识或验证客户端证书。
Cert PEM 格式的 base64 编码客户端证书(单一证书)。 分析证书以检查主题和颁发者等元数据。
Chain 一个或多个 PEM 编码的中间证书。 在生成完整信任链进行验证时提供中间证书。

后续步骤