2025年11月10日 星期一

[研究]傳送要求時發生錯誤。基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。

[研究]傳送要求時發生錯誤。基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。

2025-11-10

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

"傳送要求時發生錯誤。基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。"

Elmah 通知信:根據驗證程序,遠端憑證是無效的。
System.Security.Authentication.AuthenticationException: 根據驗證程序,遠端憑證是無效的。

********************************************************************************

方法一:全域忽略  Global.asxa => Appplication_Start()

// 強制使用 TLS1.2/1.3
System.Net.ServicePointManager.SecurityProtocol =
    System.Net.SecurityProtocolType.Tls12 |
    System.Net.SecurityProtocolType.Tls13;

// 忽略憑證錯誤
System.Net.ServicePointManager.ServerCertificateValidationCallback =
    (s, certificate, chain, sslPolicyErrors) => true;


********************************************************************************

方法二:只對 HttpClient 忽略憑證

var handler = new HttpClientHandler()
{
    ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true
};

using (var httpClient = new HttpClient(handler))
{
    var response = await httpClient.PostAsync(WS_URL + "/rest/verify", requestBody);
    var json = await response.Content.ReadAsStringAsync();
    // 處理 JSON ...
}


方法一較通用,方法二只能用於 HttpClient 元件,雖較安全,對不同 微軟或 3rd Party 套件/元件 有不同寫法,要花時間而研究。

********************************************************************************

方法三:匯入 Rest API Server 的 HTTPS 伺服器憑證公鑰 (每次對方更新,己方要下載更新)





下圖,預設,如果被匯入的電腦有根憑證、中繼憑證,可以匯入單一憑證。

下圖,如果被匯入的電腦沒有根憑證、中繼憑證,請匯入憑證鍊結。不確定也可用這種。


********************************************************************************

方法四:檢查 Rest API Server 的 HTTPS 伺服器憑證是否過期?本機上、WAF上是否都有更新。

********************************************************************************


(完)

相關

沒有留言:

張貼留言