我正在尝试使用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获取的屏幕截图。证书似乎有效。我已经创建了自己的证书颁发机构证书(自签名证书),然后我用它来创建我的服务器证书。我填写了主题名称。作为主题备用名称(SAN),我添加了IP地址。
IE和HttpClient中是否不支持SAN字段内的IP地址字段?如果是这样,是否有其他方法使用IP地址验证服务器证书?
我正在使用dotnet core 2.0。
答案 0 :(得分:3)
在阅读类似问题时,我发现了以下内容:
.NET不直接支持IP地址作为主题备用名称,因为它依赖于Schannel来验证证书中的IP地址。
Schannel仅查找" DNS名称="中的https请求中给出的主机名(IP)。证书的领域。因此,如果您可以让CA为您提供证书,其中包含" DNS名称="中列出的IP地址。然后它可能会起作用。
您可以尝试使用' DNS名称'字段。
来源:Does .NET web service client support SSL cert with IP in Alternate Subject Name