Azure 应用程序网关:客户端证书 headers?
Azure Application Gateway: Client Certificates headers?
我一直在解决我的应用程序网关和背后的 Azure Web 应用程序上的一个非常奇怪的问题。
一个月前,我用 Web 应用程序设置了我的应用程序网关,一切似乎都运行良好,正确地通过了我需要的 header。
但是现在我在获取 header “X-ARR-ClientCert” 时遇到了问题,它应该(并且曾经)存在于每个成功验证的请求中。 header 不再出现在请求中...
应用程序网关正在接收 HTTPS 并在 HTTP 中将其路由到我的 Web 应用程序。侦听器配置为使用我的 SSL 配置文件,作为我拥有的访问日志示例:
{ "timeStamp": "2021-09-13T13:42:53+00:00", "resourceId": "/SUBSCRIPTIONS/D33C8661-DE39-4265-8526-6C2B32160154/RESOURCEGROUPS/MHS-AG/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/MHS-AG", "listenerName": "gw-dev", "ruleName": "gw-dev", "backendPoolName": "dev", "backendSettingName": "http-dev", "operationName": "ApplicationGatewayAccess", "category": "ApplicationGatewayAccessLog", "properties": {"instanceId":"appgw_0","clientIP":"77.205.111.223","clientPort":57595,"httpMethod":"GET","originalRequestUriWithArgs":"\/v1\/transactions\/?acq_to_dl=0&implant_mac=99:99:99:99:90:50&timezone=8","requestUri":"\/v1\/transactions\/","requestQuery":"acq_to_dl=0&implant_mac=99:99:99:99:90:50&timezone=8","userAgent":"Python\/3.8 aiohttp\/3.7.4.post0","httpStatus":403,"httpVersion":"HTTP\/1.1","receivedBytes":1506,"sentBytes":542,"timeTaken":0.915,"transactionId":"ba23f8606b2718e7d132a27e6bf0df2a","sslEnabled":"on","sslCipher":"ECDHE-RSA-AES256-GCM-SHA384","sslProtocol":"TLSv1.2","sslClientVerify":"SUCCESS","sslClientCertificateFingerprint":"d35719cfe802e02b90b3fa2f48d2f96c605f774c","sslClientCertificateIssuerName":"DC=https:\/\/bridge-dev.snhtest.online,O=Sentinhealth,L=Grenoble,ST=Is\\C3\\A8re,C=FR","serverRouted":"40.89.141.103:80","serverStatus":"403","serverResponseLatency":"0.916","originalHost":"bridge-dev.snhtest.online","host":"bridge-dev.snhtest.online"}}
看起来验证成功了,但我没有收到带有证书的 header。
应用程序网关在成功验证时创建的 header 是否有任何文档?
最后有什么变化吗?
感谢您的帮助!
在 Microsoft 论坛的帮助下,我终于找到了问题并解决了它:
- 我没有对服务器变量使用重写规则,所以我添加了一个重写规则,现在我在 header 中有了证书(我使用 mitmproxy 进行调试)!
- 第二个问题是 Web 应用程序在“忽略”上有参数“客户端证书”。它似乎删除了 header“X-ARR-Client-Cert”,所以我需要将 header 名称更改为“X-Client-Cert”。
我认为之前有一个更改删除了应用程序网关上的 X-ARR-Client-Cert 以仅使用重写 header 或类似的东西,因为我以前从未使用过重写规则。
我一直在解决我的应用程序网关和背后的 Azure Web 应用程序上的一个非常奇怪的问题。
一个月前,我用 Web 应用程序设置了我的应用程序网关,一切似乎都运行良好,正确地通过了我需要的 header。 但是现在我在获取 header “X-ARR-ClientCert” 时遇到了问题,它应该(并且曾经)存在于每个成功验证的请求中。 header 不再出现在请求中...
应用程序网关正在接收 HTTPS 并在 HTTP 中将其路由到我的 Web 应用程序。侦听器配置为使用我的 SSL 配置文件,作为我拥有的访问日志示例:
{ "timeStamp": "2021-09-13T13:42:53+00:00", "resourceId": "/SUBSCRIPTIONS/D33C8661-DE39-4265-8526-6C2B32160154/RESOURCEGROUPS/MHS-AG/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/MHS-AG", "listenerName": "gw-dev", "ruleName": "gw-dev", "backendPoolName": "dev", "backendSettingName": "http-dev", "operationName": "ApplicationGatewayAccess", "category": "ApplicationGatewayAccessLog", "properties": {"instanceId":"appgw_0","clientIP":"77.205.111.223","clientPort":57595,"httpMethod":"GET","originalRequestUriWithArgs":"\/v1\/transactions\/?acq_to_dl=0&implant_mac=99:99:99:99:90:50&timezone=8","requestUri":"\/v1\/transactions\/","requestQuery":"acq_to_dl=0&implant_mac=99:99:99:99:90:50&timezone=8","userAgent":"Python\/3.8 aiohttp\/3.7.4.post0","httpStatus":403,"httpVersion":"HTTP\/1.1","receivedBytes":1506,"sentBytes":542,"timeTaken":0.915,"transactionId":"ba23f8606b2718e7d132a27e6bf0df2a","sslEnabled":"on","sslCipher":"ECDHE-RSA-AES256-GCM-SHA384","sslProtocol":"TLSv1.2","sslClientVerify":"SUCCESS","sslClientCertificateFingerprint":"d35719cfe802e02b90b3fa2f48d2f96c605f774c","sslClientCertificateIssuerName":"DC=https:\/\/bridge-dev.snhtest.online,O=Sentinhealth,L=Grenoble,ST=Is\\C3\\A8re,C=FR","serverRouted":"40.89.141.103:80","serverStatus":"403","serverResponseLatency":"0.916","originalHost":"bridge-dev.snhtest.online","host":"bridge-dev.snhtest.online"}}
看起来验证成功了,但我没有收到带有证书的 header。
应用程序网关在成功验证时创建的 header 是否有任何文档?
最后有什么变化吗?
感谢您的帮助!
在 Microsoft 论坛的帮助下,我终于找到了问题并解决了它:
- 我没有对服务器变量使用重写规则,所以我添加了一个重写规则,现在我在 header 中有了证书(我使用 mitmproxy 进行调试)!
- 第二个问题是 Web 应用程序在“忽略”上有参数“客户端证书”。它似乎删除了 header“X-ARR-Client-Cert”,所以我需要将 header 名称更改为“X-Client-Cert”。
我认为之前有一个更改删除了应用程序网关上的 X-ARR-Client-Cert 以仅使用重写 header 或类似的东西,因为我以前从未使用过重写规则。