详解.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");
 }
}

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

相关文章

  • Asp.Net各种超时问题总结

    Asp.Net各种超时问题总结

    在数据库或者请求操作时,如果选择的时间段过短或操作数据量过大,就会遇到"请求超时"的的问题,网络上提供很多解决方案,但普遍不完善,根据个人经验及参考网络解决方案,先将其汇总
    2013-02-02
  • asp.net异步获取datatable并显示的实现方法

    asp.net异步获取datatable并显示的实现方法

    这篇文章主要介绍了asp.net异步获取datatable并显示的实现方法,结合实例形式分析了asp.net一步操作datatable的相关技巧,需要的朋友可以参考下
    2016-03-03
  • 详解.NET中的加密算法总结(自定义加密Helper类续)

    详解.NET中的加密算法总结(自定义加密Helper类续)

    这篇文章主要介绍了详解.NET中的加密算法总结(自定义加密Helper类续) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • .net开发微信公众平台实例教程

    .net开发微信公众平台实例教程

    这篇文章主要介绍了.net开发微信公众平台的方法,对微信公众平台开发的原理与相应的.net实现方法都做了较为详细的讲述,非常实用,需要的朋友可以参考下
    2014-10-10
  • ASP.NET MVC5网站开发文章管理架构(七)

    ASP.NET MVC5网站开发文章管理架构(七)

    继上一篇把member的用户部分完成,现在开始做文章管理部分。文章部分根据涉及显示现实文章列表,发布文章,修改和删除文章等功能。最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示全部文章列表和我的文章列表,普通用户只显示我的文章列表
    2015-09-09
  • asp.net 动态创建TextBox控件及状态数据如何加载

    asp.net 动态创建TextBox控件及状态数据如何加载

    接着上文Asp.net TextBox的TextChanged事件你真的清楚吗?这里我们来说说状态数据时如何加载的,需要的朋友可以参考下
    2012-12-12
  • 在ASP.Net Core应用程序中使用Bootstrap4

    在ASP.Net Core应用程序中使用Bootstrap4

    这篇文章介绍了在ASP.Net Core应用程序中使用Bootstrap4的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • 如何利用FluentMigrator实现数据库迁移

    如何利用FluentMigrator实现数据库迁移

    这篇文章主要给大家介绍了关于如何利用FluentMigrator实现数据库迁移的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 如何限制asp.net中上传文件的大小的代码

    如何限制asp.net中上传文件的大小的代码

    maxRequestLength是控制上传大小得参数请求的最大大小(以千字节为单位)
    2011-10-10
  • .Net微信网页开发解决用户在不同公众号或在公众号、移动应用之间帐号统一问题

    .Net微信网页开发解决用户在不同公众号或在公众号、移动应用之间帐号统一问题

    这篇文章主要介绍了.Net微信网页开发解决用户在不同公众号或在公众号、移动应用之间帐号统一问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论