无法建立 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 连接的主要内容,如果未能解决你的问题,请参考以下文章

发生ssl错误 无法建立到该服务器的安全连接

tomcat无法建立ssl连接

无法建立 SSL 连接

无法建立到远程服务器的 SSL 连接

无法建立 SSL 连接,请参阅内部异常

text 无法建立SSL连接