.NET Core HttpClient 忽略 HTTPS 证书
在使用 .NET Core 中的 HttpClient 时,有时我们需要忽略 HTTPS 证书的验证。这通常在开发环境或测试环境中非常有用,因为我们可能使用了自签名证书或无效的证书。
本文将介绍如何在 .NET Core 中使用 HttpClient 忽略 HTTPS 证书的验证,并提供相关的代码示例。
使用 HttpClient 忽略 HTTPS 证书
在 .NET Core 中,我们可以通过配置 HttpClientHandler 的 ServerCertificateCustomValidationCallback 属性来实现忽略 HTTPS 证书的验证。
下面是一个示例代码:
using System;
using System.Net.Http;
using System.Net.Security;
namespace HttpClientIgnoreCertificateExample
{
class Program
{
static void Main(string[] args)
{
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
using (var client = new HttpClient(handler))
{
var response = client.GetAsync("
var content = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(content);
}
}
}
}
在上面的示例中,我们创建了一个 HttpClientHandler 对象,并设置了 ServerCertificateCustomValidationCallback 属性。该属性接受一个回调函数,该函数用于验证服务器证书是否有效。在这个示例中,我们直接返回了 true
,表示忽略证书验证。
然后,我们使用该 HttpClientHandler 对象创建了一个 HttpClient 对象,并发送了一个 HTTPS 请求。在发送请求时,HttpClient 将使用我们配置的 HttpClientHandler 对象进行验证。
使用自定义 HttpClientFactory 忽略 HTTPS 证书
在 .NET Core 2.1 之后的版本中,我们可以通过自定义 HttpClientFactory 来实现全局的 HttpClient 配置,包括忽略 HTTPS 证书验证。
下面是一个示例代码:
using System;
using System.Net.Http;
using System.Net.Security;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http;
namespace HttpClientIgnoreCertificateExample
{
class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection();
services.AddHttpClient("ignoreCertificate")
.ConfigurePrimaryHttpMessageHandler(() =>
{
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
return handler;
});
var serviceProvider = services.BuildServiceProvider();
var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
using (var client = httpClientFactory.CreateClient("ignoreCertificate"))
{
var response = client.GetAsync("
var content = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(content);
}
}
}
}
在上面的示例中,我们首先创建了一个 ServiceCollection 对象,并添加了一个名为 "ignoreCertificate" 的 HttpClient。我们通过调用 ConfigurePrimaryHttpMessageHandler 方法来配置 HttpClient 的主处理程序。在这个方法中,我们创建了一个自定义的 HttpClientHandler,并设置了 ServerCertificateCustomValidationCallback 属性为忽略证书验证。
然后,我们使用 ServiceCollection 对象创建了一个 ServiceProvider,并通过该 ServiceProvider 获取了一个 IHttpClientFactory 对象。我们使用 IHttpClientFactory 创建了一个名为 "ignoreCertificate" 的 HttpClient,并发送了一个 HTTPS 请求。
结论
在本文中,我们学习了如何在 .NET Core 中使用 HttpClient 忽略 HTTPS 证书的验证。我们提供了两种方法,一种是直接配置 HttpClientHandler 的 ServerCertificateCustomValidationCallback 属性,另一种是通过自定义 HttpClientFactory 来全局配置 HttpClient。
在实际开发中,我们需要谨慎使用忽略证书验证的功能,因为这可能带来安全风险。我们应该仅在开发环境或测试环境中使用,而不应该在生产环境中使用。
希望本文对你了解和使用 .NET Core 中的 HttpClient 忽略 HTTPS 证书有所帮助。
参考链接:
- [.NET Core HttpClient ignoring Certificate Errors](
- [HttpClientHandler.ServerCertificateCustomValidationCallback Property](