首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Net.WebException:基础连接已关闭:无法为SSL/TLS安全通道建立信任关系

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

Stack Overflow用户
提问于 2019-12-09 12:34:58
回答 1查看 4.6K关注 0票数 4

我在VM中有一个windows服务。它正在调用托管在另一个服务器中的API。当我从我的windows服务调用那个api时,它给了我错误,它说:

System.Net.WebException:基础连接已关闭:无法为SSL/TLS安全通道建立信任关系。-> System.Security.Authentication.AuthenticationException:根据验证过程远程证书无效。

现在我知道了,如果在调用api之前添加这一行,它就会正常工作。

代码语言:javascript
复制
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

但是我不想更改我的代码并再次部署它。有什么方法可以让我在VM中做一些托管windows服务的事情,比如信任证书之类的,这将解决这个问题吗?

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-12-09 15:59:04

我碰到过几次这个。它可能意味着一些事情:

  • 不支持的协议(SSL/TSL)
  • 无匹配密码
  • .NET框架版本< 4.6.1需要特殊代码

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

代码语言:javascript
复制
nmap -sV --script ssl-enum-ciphers -p 443 <host>

一旦有了支持的协议/密码列表,您就可以使用名为IISCrypto的免费工具在客户端机器上检查自己,并验证是否启用了匹配的协议/密码组合。

对于最后一个选项,如果运行的内容少于.NET Framework4.6.1,则可能需要添加:

代码语言:javascript
复制
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

我并不建议严格按照上面的方式设置协议(因为TLS1.3即将到来)。应该总是尝试让窗口为您确定最高的安全性。有时,某些邪恶是前进所必需的。你以后总是可以再看的。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59249053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档