Azure应用网关V2与App Service双向认证遇Access Denied错误
问题排查与解决步骤
1. 确认后端HTTP设置的证书传递配置
AGW要将用户的客户端证书转发给后端App Service,必须在后端HTTP设置中开启Pick client certificate选项,并关联你之前创建的SSL配置文件(对应根证书的公证书)。如果未开启该选项,AGW不会传递客户端证书,后端App Service会因缺少证书返回403拒绝访问。
2. 核对App Service的证书信任规则
你的App Service已开启双向认证,需确认:
- AGW SSL配置文件中的根证书,与App Service上上传的根证书完全一致(需保证公钥匹配,导出公证书时避免操作错误);
- App Service的双向认证规则,是否信任AGW转发过来的客户端证书——若证书不是由信任的根证书签发,后端会直接拒绝请求。
3. 明确健康探针的局限性
你调整探针状态码范围后显示健康,但要注意:AGW的健康探针不支持携带客户端证书,而你的App Service要求双向认证,所以探针请求本身会被返回403。这种探针健康状态仅为表面状态,不代表实际用户请求能正常通过AGW转发到后端。
4. 检查AGW监听器的SSL配置
AGW监听器需配置为HTTPS类型,同时:
- 绑定
test.mydomain.com对应的服务器SSL证书; - 将
Client certificate authentication设置为Require或Optional(根据你的业务需求),确保AGW能接收用户请求中的客户端证书,并转发给后端App Service。
5. 利用日志定位具体问题
- 开启App Service的诊断日志,查看HTTP请求日志,确认来自AGW的请求是否携带客户端证书,以及403错误的具体原因(如证书未被信任、请求无证书等);
- 查看AGW的访问日志和后端健康日志,排查请求在AGW层面的处理细节,比如证书传递是否出现异常。
6. 手动验证证书传递流程
使用curl工具分别测试直接访问App Service和通过AGW访问的情况,对比结果:
# 直接访问App Service(验证证书有效性) curl -v --cert 你的客户端证书.pem --key 你的客户端密钥.pem https://apptemp.azurewebsites.net/swagger/index.html # 通过AGW访问(验证证书传递是否正常) curl -v --cert 你的客户端证书.pem --key 你的客户端密钥.pem https://test.mydomain.com/swagger/index.html
根据返回的错误信息,进一步定位是证书信任问题,还是AGW未正确转发证书。
内容的提问来源于stack exchange,提问作者Shadi
相关产品推荐
相关产品推荐

