簡體   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