【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 也成功完成,但之后未见任何应用层数据交换。 image.png

使用 OpenSSL 工具从 Kudu 环境连接远程端点时,返回的证书链中包含了一个由内部私有 CA(HealthPartners)签发的中间证书,这是因为防火墙启用了 SSL Inspection,并插入了证书。

openssl s_client -showcerts -connect xxxxx.mysaleforce.com:443 image.png

由于 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

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!