你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
相互身份验证或客户端身份验证允许应用程序网关对发送请求的客户端进行身份验证。 通常,只有客户端对应用程序网关进行身份验证。 相互身份验证允许客户端和应用程序网关相互进行身份验证。
注意
建议将 TLS 1.2 与相互身份验证配合使用,因为将来将强制使用 TLS 1.2。
相互身份验证
应用程序网关支持基于证书的相互身份验证。 可以将受信任的客户端 CA 证书上传到应用程序网关,网关使用这些证书对发送请求的客户端进行身份验证。 随着 IoT 用例的增加以及跨行业的安全要求的增加,相互身份验证提供了一种管理和控制哪些客户端可以与应用程序网关通信的方法。
应用程序网关提供以下两个选项来验证客户端证书:
双向 TLS 透传模式
在相互 TLS (mTLS) 传递模式下,应用程序网关在 TLS 握手期间请求客户端证书,但如果证书缺失或无效,则不会终止连接。 无论证书的存在或有效性如何,与后端的连接都会继续进行。 如果提供了证书,应用程序网关可以根据需要将其转发到后端。 后端服务负责验证客户端证书。
mTLS 直通模式的优点
mTLS 传递模式具有以下优势:
- 简化的网关配置:网关级别无需上传 CA 证书。
- 灵活身份验证:支持混合流量方案,其中一些客户端使用证书,而另一些客户端则使用基于令牌的身份验证。
- 后端策略强制实施:允许后端应用程序实现自定义证书验证逻辑和策略。
- 降低网关开销:将证书验证卸载到后端,从而减少网关上的处理。
- 逐步迁移支持:在不中断现有流量模式的情况下启用分阶段推出 mTLS。
若要将客户端证书转发到后端,请配置服务器变量。 有关详细信息,请参阅 服务器变量。
配置 mTLS 传递模式
可以使用 Azure 门户或 ARM 模板配置 mTLS 直通模式。
若要在 Azure 门户中配置 mTLS 传递模式,
进入“应用程序网关”资源。
在 “设置”下,选择 “SSL 配置”。
选择 “+ 添加” 以创建新的 SSL 配置文件。
输入您的 SSL 配置文件名称。
在“客户端身份验证”选项卡上,选择“直通”。
在传递模式下,客户端证书是可选的。 后端服务器负责客户端身份验证。
根据需要配置 SSL 策略设置。
选择 “添加” 以创建 SSL 配置文件。
将 SSL 配置文件与 HTTPS 侦听器相关联。
注意
PowerShell 和 CLI 对直通配置的支持当前不可用。
双向 TLS 严格模式
在相互 TLS 严格模式下,应用程序网关会在 TLS 握手期间通过要求提供有效的客户端证书来强制实施客户端证书身份验证。 若要启用严格模式,请上传包含根 CA 和(可选)中间 CA 的受信任客户端 CA 证书作为 SSL 配置文件的一部分。 将此 SSL 配置文件与侦听器关联,以强制实施相互身份验证。
配置双向 TLS 严格模式
若要配置相互身份验证严格模式,请将受信任的客户端 CA 证书作为 SSL 配置文件的客户端身份验证部分的一部分上传。 然后将 SSL 配置文件与侦听器相关联,以完成配置。 上传的客户端证书必须始终包含根 CA 证书。 可以上传证书链,但除了任何中间 CA 证书之外,该链还必须包含根 CA 证书。 每个上载文件的最大大小必须小于或等于 25 KB.
例如,如果您的客户端证书包含一个根 CA 证书、多个中间 CA 证书和一个终端证书,请将根 CA 证书和所有中间 CA 证书合并为一个文件上传到应用程序网关。 有关如何提取受信任的客户端 CA 证书的详细信息,请参阅 提取受信任的客户端 CA 证书。
如果要上传具有根 CA 证书和中间 CA 证书的证书链,请将证书链作为 PEM 或 CER 文件上传到网关。
重要说明
使用相互身份验证时,将整个受信任的客户端 CA 证书链上传到应用程序网关。
每个 SSL 配置文件最多可支持 100 个受信任的客户端 CA 证书链。 单一应用程序网关总共可支持 200 个受信任的客户端 CA 证书链。
注意
- 相互身份验证仅适用于Standard_v2和WAF_v2 SKU。
- 目前可通过 REST API、PowerShell 和 CLI 配置 TLS 协议侦听器 的相互身份验证。
TLS 双向严格模式下支持的身份验证证书
应用程序网关支持由公共和私有证书颁发机构颁发的证书。
- 从已知证书颁发机构颁发的 CA 证书:中间证书和根证书通常位于受信任的证书存储中,并且启用受信任的连接,但设备上几乎没有额外的配置。
- 从组织建立的证书颁发机构颁发的 CA 证书:这些证书通常通过组织私下颁发,不受其他实体信任。 将中间证书和根证书导入受信任的证书存储,以便客户端建立链信任。
注意
从成熟的证书颁发机构颁发客户端证书时,请考虑与证书颁发机构合作,看看是否可以为组织颁发中间证书。 此方法可防止无意中的跨组织客户端证书身份验证。
相互 TLS 严格模式的客户端身份验证验证
验证客户端证书 DN
可以验证客户端证书的直接颁发者,并且仅允许应用程序网关信任该颁发者。 此选项默认处于关闭状态,但可以通过门户、PowerShell 或Azure CLI启用此选项。
如果启用应用程序网关来验证客户端证书的直接颁发者,以下方案描述了如何从上传的证书中提取客户端证书颁发者 DN:
-
方案 1:证书链包括根证书、中间证书和叶证书。
- 中间证书的使用者名称提取为客户端证书颁发者 DN。
-
方案 2:证书链包括根证书、中间 1 证书、中间 2 证书和叶证书。
- 中间 2 证书的使用者名称提取为客户端证书颁发者 DN。
-
方案 3:证书链包括根证书和叶证书。
- 根证书的使用者名称提取为客户端证书颁发者 DN。
-
方案 4:同一文件中具有相同长度的多个证书链。 链 1 包括根证书、中间 1 证书和叶证书。 链 2 包括根证书、中间 2 证书和叶证书。
- 中间 1 证书的使用者名称提取为客户端证书颁发者 DN。
-
方案 5:同一文件中具有不同长度的多个证书链。 链 1 包括根证书、中间 1 证书和叶证书。 链 2 包括根证书、中间 2 证书、中间 3 证书和叶证书。
- 中间 3 证书的使用者名称提取为客户端证书颁发者 DN。
重要说明
建议每个文件只上传一个证书链。 如果启用验证客户端证书 DN 选项,则此建议尤其重要。 在一个文件中上传多个证书链会导致方案 4 或 5,这可能会导致以后出现的问题,即所提供的客户端证书与应用程序网关从链中提取的客户端证书颁发者 DN 不匹配。
有关如何提取受信任的客户端 CA 证书链的详细信息,请参阅 提取受信任的客户端 CA 证书链。
服务器变量
通过相互 TLS 身份验证,可以使用其他服务器变量将有关客户端证书的信息传递给应用程序网关后面的后端服务器。 有关哪些服务器变量可用以及如何使用这些变量的详细信息,请参阅 服务器变量。
证书吊销
当客户端启动与配置了相互 TLS 身份验证的应用程序网关的连接时,可以验证证书链和颁发者的专有名称。 此外,可以使用 OCSP(联机证书状态协议)检查客户端证书的吊销状态。 验证期间,通过其颁发机构信息访问 (AIA) 扩展中定义的 OCSP 响应程序查找客户端提供的证书。 如果客户端证书已吊销,应用程序网关将使用 HTTP 400 状态代码和原因响应客户端。 如果证书有效,应用程序网关将继续处理请求,并转发到定义的后端池。
可以通过 REST API、ARM 模板、Bicep、CLI 或 PowerShell 启用客户端证书吊销。
若要使用 Azure PowerShell 在现有应用程序网关上配置客户端吊销检查,请使用以下命令:
# Get Application Gateway configuration
$AppGw = Get-AzApplicationGateway -Name "ApplicationGateway01" -ResourceGroupName "ResourceGroup01"
# Create new SSL Profile
$profile = Get-AzApplicationGatewaySslProfile -Name "SslProfile01" -ApplicationGateway $AppGw
# Verify Client Cert Issuer DN and enable Client Revocation Check
Set-AzApplicationGatewayClientAuthConfiguration -SslProfile $profile -VerifyClientCertIssuerDN -VerifyClientRevocation OCSP
# Update Application Gateway
Set-AzApplicationGateway -ApplicationGateway $AppGw
有关应用程序网关上客户端身份验证配置的所有Azure PowerShell引用的列表,请参阅以下文章:
若要验证是否已针对客户端请求评估 OCSP 吊销状态, 访问日志 包含一个调用 sslClientVerify 的属性,该属性显示 OCSP 响应的状态。
确保 OCSP 响应程序具有高可用性,并且需要确保应用程序网关与响应方之间的网络连接是可实现的。 如果应用程序网关无法解析定义的响应程序的完全限定域名(FQDN),或者如果阻止与响应方建立网络连接,证书吊销状态将失败,应用程序网关会向请求客户端返回 400 HTTP 响应。
注意
OCSP 校验通过本地缓存,根据先前 OCSP 响应定义的 nextUpdate 时间进行验证。 如果未从以前的请求填充 OCSP 缓存,则第一个响应可能会失败。 重试客户端后,应在缓存中找到响应,并按预期处理请求。
说明
- 不支持通过 CRL 进行吊销检查。
- API 版本 2022-05-01 中引入了客户端吊销检查。
相关内容
了解相互身份验证后,请转到 PowerShell 中使用相互身份验证配置应用程序网关 ,以创建使用相互身份验证的应用程序网关。