Azure 容器应用支持客户端证书身份验证(也称为相互 TLS 或 mTLS),后者允许通过双向身份验证访问容器应用。 本文介绍如何在 Azure 容器应用中配置客户端证书授权。
使用客户端证书时,TLS 证书会在客户端和容器应用之间交换,以验证身份并加密流量。 客户端证书通常用于“零信任”安全模型,以便进行组织内客户端访问授权。
例如,对于管理敏感数据的容器应用,你可以要求客户端证书。
当 PKCS12 格式的客户端证书由受信任的证书颁发机构 (CA) 颁发或自签名时,容器应用会接受这些证书。
若要配置对客户端证书的支持,请在容器应用模板中设置 clientCertificateMode
属性。
此属性可以设置为下列值之一:
-
require
:对容器应用的所有请求都需要客户端证书。 -
accept
:客户端证书是可选的。 如果未提供客户端证书,则仍会接受请求。 -
ignore
:忽略客户端证书。
如果设置了 require
或 accept
,入口会将客户端证书传递给容器应用。
以下 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
标头的示例值:
Hash=<HASH_VALUE>;Cert="-----BEGIN CERTIFICATE-----<CERTIFICATE_VALUE>";Chain="-----BEGIN CERTIFICATE-----<CERTIFICATE_VALUE>";
领域 | DESCRIPTION | 如何使用 |
---|---|---|
Hash |
客户端证书的 SHA-256 指纹。 | 使用指纹标识或验证客户端证书。 |
Cert |
PEM 格式的 base64 编码客户端证书(单一证书)。 | 分析证书以检查主题和颁发者等元数据。 |
Chain |
一个或多个 PEM 编码的中间证书。 | 在生成完整信任链进行验证时提供中间证书。 |