.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](