【App Services】App Service报错远程证书无效 ‐ "The remote certificate is invalid according to the validation procedure" - LuBu0505/My-Code GitHub Wiki
问题描述
在开发环境中部署的新应用(App Service)无法与 Salesforce 的远程端点建立 SSL/TLS 连接,报错信息如下:
"The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel." "The remote certificate is invalid according to the validation procedure."
问题解答
通过网络抓包分析,三次握手(SYN、SYN-ACK、ACK)正常,Client Hello 和 Server Hello 也成功完成,但之后未见任何应用层数据交换。
使用 OpenSSL 工具从 Kudu 环境连接远程端点时,返回的证书链中包含了一个由内部私有 CA(HealthPartners)签发的中间证书,这是因为防火墙启用了 SSL Inspection,并插入了证书。
openssl s_client -showcerts -connect xxxxx.mysaleforce.com:443
由于 App Service 无法验证由私有 CA 签发的证书,因此导致连接失败。
解决方案
禁用防火墙的 SSL Inspection 功能,从而避免中间人证书插入,恢复了与远程端点的正常 SSL 通信。
其他可选的办法还有:
- 设置
WEBSITE_LOAD_ROOT_CERTIFICATES
环境变量(仅适用于 ASE 或 Linux App Service)。 - 在代码中临时禁用 SSL 验证(例如使用
ServerCertificateCustomValidationCallback
),仅适用于测试环境。
参考资料
How to change Grails spring-security-ldap:2.0.1 plugin to use customised AuthoritiesPopulator? https://stackoverflow.com/questions/51297420/bypass-invalid-ssl-certificate-in-net-core
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator Property (System.Net.Http) : https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclienthandler.dangerousacceptanyservercertificatevalidator?view=netcore-3.0
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!