簡體   English   中英

如何使用C#中的HttpClient通過IP地址啟動與服務器的可信TLS連接?

[英]How to start a trusted TLS connection with a server by IP address using HttpClient in C#?

我正在嘗試使用Windows上的C# HttpClient建立與(本地)VM中運行的應用程序的TLS連接。 但是,每次都會導致RemoteCertificateNameMismatch錯誤。

這段代碼:

HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (request, cert, chain, policyErrors) =>
{
    Console.WriteLine($"Policy Errors: {policyErrors}");
    return policyErrors == SslPolicyErrors.None;
};
HttpClient httpClient = new HttpClient(handler)
{
    BaseAddress = new Uri("https://192.168.99.100/engine-rest")
};
var result = httpClient.GetAsync("/engine").Result;

結果出現此錯誤:

Policy Errors: RemoteCertificateNameMismatch

Unhandled Exception: System.AggregateException: One or more errors occurred. (An error occurred while sending the request.) ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpxception: A security error occurred
   at System.Net.Http.WinHttpRequestCallback.OnRequestSendingRequest(WinHttpRequestState state)
   at System.Net.Http.WinHttpRequestCallback.RequestCallback(IntPtr handle, WinHttpRequestState state, UInt32 internetStatus, IntPtr statusInformation, UInt32 statusInformationLength)

但是,我的證書根據Google Chrome和Mozilla Firefox有效,但不適用於Internet Explorer。

Chrome中的有效服務器證書

查看從Chrome獲取的屏幕截圖。 證書似乎有效。 我已經創建了自己的證書頒發機構證書(自簽名證書),然后我用它來創建我的服務器證書。 我填寫了主題名稱。 作為主題備用名稱(SAN),我添加了IP地址。

IE和HttpClient中不支持SAN字段內的IP地址字段嗎? 如果是這樣,是否有其他方法使用IP地址驗證服務器證書?

我正在使用dotnet core 2.0。

閱讀類似的問題,我發現了以下內容:

.NET不直接支持IP地址作為主題備用名稱,因為它依賴於Schannel來驗證證書中的IP地址。

Schannel僅在證書的“DNS Name =”字段中查找https請求中給出的主機名(IP)。 因此,如果您可以讓CA為您提供“DNS Name =”字段中列出的IP地址的證書,那么它可能會起作用。

您可以嘗試使用“DNS名稱”字段。

來源: .NET Web服務客戶端是否支持使用備用主題名稱中的IP的SSL證書

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM