无法建立 SSL 连接
Posted
技术标签:
【中文标题】无法建立 SSL 连接【英文标题】:SSL connection could not be established 【发布时间】:2021-10-20 09:05:58 【问题描述】:作为自动化测试的一部分,我在发送 HTTP 请求时遇到问题,我想检查 URL 的状态代码。当我发送请求时,我有一个例外:
System.AggregateException: '发生一个或多个错误。 (,请参阅内部异常。)'
内部异常是:
HttpRequestException:,请参阅内部异常。
IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。
SocketException: 现有连接被远程主机强行关闭。
我的代码:
public HttpStatusCode SendRequest(string _url)
SetUrl(_url);
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => return true; ;
clientHandler.SslProtocols = SslProtocols.Tls;
HttpClient client = new HttpClient(clientHandler);
var response = client.GetAsync(Url).Result;
StatusCode = response.StatusCode;
return StatusCode;
提前谢谢你!
【问题讨论】:
您拥有哪个版本的 Windows 和 .Net?服务器有哪个版本的 TLS? @Charlieface Windows 10, .NET Core 5.0 关于 TLS,我真的不知道,因为它是为我们提供安全解决方案的外部公司。 在浏览器中打开,点击网址旁边的锁符号查看安全信息 @Charlieface 我在那里看到 V3 .. 是否意味着 SSL 3.0? 【参考方案1】:正如@CodeCaster 已经提到的:SslProtocols.Tls
(TLS 1.0) 现在不是一种选择。只需使用SslProtocols.None
(这是默认设置)让操作系统为您选择最佳选项:
无:允许操作系统选择要使用的最佳协议,并阻止不安全的协议。除非您的应用有特定理由不这样做,否则您应该使用此字段。
https://docs.microsoft.com/en-us/dotnet/api/system.security.authentication.sslprotocols?view=net-5.0#fields
此外,跳过服务器证书验证(通过让ServerCertificateCustomValidationCallback
返回 true)是一件非常危险的事情。你应该避免这种情况。
远程主机是否在您的控制之下?你能检查一下它使用的是哪个 TLS 版本吗?
【讨论】:
很遗憾我不能,如果只是为了自动化,没有其他方法可以通过吗?【参考方案2】:远程主机确实(正确地)不接受您要使用已弃用的 TLS 1.0 进行连接。
指定 .Tls12 或 .Tls13。
【讨论】:
感谢您的回复,我试过了,不幸的是,它也不起作用。以上是关于无法建立 SSL 连接的主要内容,如果未能解决你的问题,请参考以下文章