System.Net.WebException: 基础连接已关闭: 无法为 SSL/TLS 安全通道建立信任关系



我在虚拟机中有一个Windows服务。它正在调用托管在另一台服务器中的 API。当我从我的 Windows 服务调用该 api 时,它给我错误说:

System.Net.WebException:底层连接已关闭:可以 不为 SSL/TLS 安全通道建立信任关系。--->系统.安全.身份验证.身份验证异常:远程 根据验证过程,证书无效。

现在我知道,如果我在调用 api 之前添加此行,它将正常工作。

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

但我不想更改我的代码并再次部署它。有什么方法可以在托管Windows服务的VM中执行某些操作,例如信任证书或其他内容,从而解决此问题?

这方面的任何帮助都是非常有帮助的。谢谢。

我知道这个问题被问了很多次,但所有解决方案都要求我要么更改托管 api 的服务器,要么更改我的代码以添加上述行。我正在寻找一种解决方案,我可以在客户端计算机而不是其他任何地方进行更改。

我遇到过几次。这可能意味着几件事:

  • 不支持的协议 (SSL/TSL(
  • 没有匹配的密码
  • .NET Framework 版本 <4.6.1 需要特殊代码

对于前两个选项,您可以使用 nmap 来确定服务器支持的协议和密码列表:

nmap -sV --script ssl-enum-ciphers -p 443 <host>

获得支持的协议/密码列表后,您可以使用名为 IISCrypto 的免费工具在客户端计算机上检查自己的协议/密码,并验证是否已启用匹配的协议/密码组合。

对于最后一个选项,如果您运行的不是 .NET Framework 4.6.1,则可能需要添加:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

我真的不建议严格按照上述方式设置协议(因为TLS 1.3即将到来(。应始终尝试让窗口为您确定最高的安全性。有时,某些邪恶是前进所必需的。您以后可以随时重新访问它。

这帮助我解决了这个特殊问题。希望它能帮助你。

最新更新