作為自動化測驗的一部分,我在發送 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;
}
先感謝您 !
uj5u.com熱心網友回復:
遠程主機確實(理所當然地)不接受您要使用已棄用的 TLS 1.0 進行連接。
指定 .Tls12 或 .Tls13。
uj5u.com熱心網友回復:
正如@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 版本嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/328325.html
