详解.NET Core 使用HttpClient SSL请求出错的解决办法

 更新时间:2019年03月06日 11:36:24   作者:myzony  
这篇文章主要介绍了.NET Core 使用HttpClient SSL请求出错的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

问题

使用 HTTP Client 请求 HTTPS 的 API 时出现 The certificate cannot be verified up to a trusted certification authority 异常,并且证书已经传入。

下面就是问题代码:

public class Program
{
 public static void Main(string[] args)
 {
  var url = @"https://xxx.xxx.xxx.xxx:xxxx/xxx-web/services/xxxx?wsdl";

  var handler = new HttpClientHandler
  {
   ClientCertificateOptions = ClientCertificateOption.Manual,
   ClientCertificates =
   {
    new X509Certificate2(@"E:\cert\rootTrust.cer","11111111"),
    new X509Certificate2(@"E:\cert\middleTrust.cer","11111111"),
    new X509Certificate2(@"E:\cert\wskey.pfx","ws654321")
   }
  };
  
  var webRequest = new HttpClient(handler);
  var result = webRequest.GetStringAsync(url).GetAwaiter().GetResult();
  Console.WriteLine(result);
 }
}

原因

因为在发出 HTTPS 请求的时候,HttpClient 都会检查 SSL 证书是否合法。如果不合法的话,就会导致抛出异常信息,而对方给出的证书是自签发的测试接口的证书,所以不是一个合法的 SSL 证书。

解决

HttpClientHandler 当中会有一个 ServerCertificateCustomValidationCallback 事件,该事件用于判定证书验证是否通过。我们可以挂接该事件,然后逻辑编写为直接返回 true 结果,这样就会忽略掉证书异常的情况。

最新的代码如下:

public class Program
{
 public static void Main(string[] args)
 {
  var url = @"https://xxx.xxx.xxx.xxx:xxxx/xxx-web/services/xxxx?wsdl";

  var handler = new HttpClientHandler
  {
   ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true, 
   ClientCertificateOptions = ClientCertificateOption.Manual,
   ClientCertificates =
   {
    new X509Certificate2(@"E:\cert\rootTrust.cer","11111111"),
    new X509Certificate2(@"E:\cert\middleTrust.cer","11111111"),
    new X509Certificate2(@"E:\cert\wskey.pfx","ws654321")
   }
  };
  
  var webRequest = new HttpClient(handler);
  var result = webRequest.GetStringAsync(url).GetAwaiter().GetResult();
  Console.WriteLine("xx");
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解.Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute)

    详解.Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute)

    这篇文章主要介绍了.Net Core 权限验证与授权(AuthorizeFilter、ActionFilterAttribute),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • asp.net中Table生成Excel表格的方法

    asp.net中Table生成Excel表格的方法

    这篇文章主要介绍了asp.net中Table生成Excel表格的方法,可实现将html的table表格生成excel的功能,需要的朋友可以参考下
    2015-01-01
  • ASP.NET数据库存取图片的方法

    ASP.NET数据库存取图片的方法

    这篇文章主要为大家详细介绍了ASP.NET数据库如何存取图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 如何使用ASP.NET MiniAPI 调试未匹配请求路径

    如何使用ASP.NET MiniAPI 调试未匹配请求路径

    ASP.NET MiniAPI是一个轻量级的Web API框架,它可以让我们快速地构建和部署RESTful服务,本文给大家介绍使用ASP.NET MiniAPI 调试未匹配请求路径的方法,感兴趣的朋友一起看看吧
    2024-01-01
  • ASP.NET 文件断点续传实现代码

    ASP.NET 文件断点续传实现代码

    在文件下载的时候,使用断点续传可以将上次未下载完成的文件继续下载,该功能在开发文件下载的时候非常重要。这里我将介绍一种比较简单的断点续传功能的实现方法,仅供初学者参考使用
    2012-06-06
  • Asp.net发送邮件的两种方法小结

    Asp.net发送邮件的两种方法小结

    这几天看了一下Asp.net发送邮件方面的东西,记得之前的IIS6上有SMTP服务器,可以直接利用这个进行邮件发送,现在的开发环境是Windows 7,找了半天没有找到,到网络上查了才知道原来windows 7和Vista都将SMTP服务器去掉了,现在将两种方法总结一下。
    2010-06-06
  • 解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)

    解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)

    这篇文章主要介绍了解决ASP.NET回传后div滚动条位置复位的问题,中心思想是用一个隐藏控件保存当前scorll值。回传回来后根据scrollTop的值,然后在Page_Load中重新设置scrollTop
    2014-01-01
  • asp.net 组件开发中的内嵌资源引用

    asp.net 组件开发中的内嵌资源引用

    asp.net 组件开发中的内嵌资源引用实现代码,需要的朋友可以参考下。
    2011-12-12
  • Automation服务器不能创建对象的多种解决办法

    Automation服务器不能创建对象的多种解决办法

    这篇文章主要介绍了Automation服务器不能创建对象的多种解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 浅析.net core 抛异常对性能影响

    浅析.net core 抛异常对性能影响

    在.net项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题,下面通过本文介绍.net core 抛异常对性能影响的求证之路,需要的朋友可以参考下
    2022-06-06

最新评论