Azure应用网关能否配置基于路径的条件式mTLS(类App Service Allow模式)?
如何在Azure应用网关实现基于路径的条件式mTLS(模拟App Service的Allow模式)
我们的Azure App Service部署了API应用,包含/public/xyz等公开端点和/secured/xyz等需要X.509证书认证的端点。原本App Service配置为Client certificate mode = Allow:客户端可选择提供证书(网关会通过X-ARR-ClientCert头转发给应用),未提供证书的请求也能正常转发,实现了基于路径的差异化认证。现在需要在客户端和App Service之间加入Azure应用网关,且保持原有行为不变,但应用网关原生mTLS是针对整个监听器(域名)生效,无法直接按路径区分要求。
目前Azure应用网关没有原生的基于路径的mTLS配置选项,但可以通过SSL Profile的可选客户端证书验证 + WAF自定义规则的组合来实现等效效果,步骤如下:
1. 配置应用网关的SSL Profile(启用可选mTLS)
- 创建或修改应用网关的SSL Profile,将客户端证书验证模式设置为
Optional(对应App Service的Allow模式)。- 此模式下,客户端可以选择提供证书:若提供有效证书,应用网关会将证书内容通过
X-ARR-ClientCert请求头转发给后端的App Service;若未提供证书,请求仍会正常转发。
- 此模式下,客户端可以选择提供证书:若提供有效证书,应用网关会将证书内容通过
- 确保SSL Profile关联到应用网关的HTTPS监听器上。
2. 配置WAF自定义规则(基于路径控制证书要求)
如果你的应用网关已启用WAF(Web应用防火墙),可以添加自定义规则来实现路径级的证书校验:
- 规则1(拦截无证书的/secured/请求):
- 规则类型:自定义规则
- 匹配条件:
- 匹配项:请求URI
- 运算符:正则匹配
- 值:
^/secured/.*$ - 额外条件:检查客户端证书是否存在(使用网关内置变量
{var.client.certificate.present},值为false)
- 动作:拒绝(返回403状态码)
- 规则2(放行/public/请求):
- 规则类型:自定义规则
- 匹配条件:
- 匹配项:请求URI
- 运算符:正则匹配
- 值:
^/public/.*$
- 动作:允许
这样配置后:
- 访问
/secured/*路径时,若客户端未提供有效证书,WAF会直接拦截请求;若提供了证书,请求会转发给App Service,由应用层完成后续认证逻辑。 - 访问
/public/*路径时,无论客户端是否提供证书,请求都会正常转发给App Service。
注意事项
- 若应用网关未启用WAF,需要先开启WAF(推荐使用Premium层以获得更灵活的自定义规则支持)。
- 确保应用网关的后端池配置正确指向目标App Service,且后端设置中已配置正确的主机头(可选择"从后端目标获取主机名"),避免App Service因主机头不匹配拒绝请求。
- 测试时需验证两种路径的请求行为:
/public/端点无需证书即可访问,/secured/端点无证书时返回403,提供有效证书时能正常进入应用层认证流程。
内容的提问来源于stack exchange,提问作者misterx7509
相关产品推荐
相关产品推荐

