繁体   English   中英

无法建立 SSL 连接

[英]SSL connection could not be established

作为自动化测试的一部分,我在发送 HTTP 请求时遇到问题,我想检查 URL 的状态代码。 当我发送请求时,我有一个例外:

System.AggregateException: '发生一个或多个错误。 (无法建立 SSL 连接,请参阅内部异常。)'

内部例外是:

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

IOException:无法从传输连接读取数据:远程主机强制关闭现有连接。

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;
    }

先感谢您 !

远程主机确实(理所当然地)不接受您要使用已弃用的 TLS 1.0 进行连接。

指定 .Tls12 或 .Tls13。

正如@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 版本吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM