关于.Net/Mono环境下HttpClient/HttpWebRequest访问Https的坑

时间:2020-07-18 12:21   作者:ChenReal    阅读:94

今天部署一个应用到,部署应用遇到个小坑。

部署环境

  • 服务器:Linux Sever
  • 环境:Mono 6.x
  • 应用:.NET Framework 4.X ConsoleApp

问题

在本地开发环境上,运行 mono ConsoleApp.exe 跑得十分欢快。结果,部署到生产环境就立马挂掉了!

一通查log + Debug下来,发现全都是Http客户端请求Https地址,因为SSL安全校验的报错。

HttpWebRequest 报错:TrustFailure (Authentication failed, see inner exception.)

HttClient 报错:The SSL connection could not be established

问题找到了,于是连忙问某度。找到了一个简单粗暴的解决方案,不废话直接上代码:

  • for HttClient
HttpClientHandler httpClientHandler = new HttpClientHandler()
{
    ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true
};
var httpClient = new HttpClient(httpClientHandler);
var response = httpClient.GetAsync(url)
....
  • for HttpWebRequest
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((message, certificate2, arg3, arg4) => true);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
...

搞定,收工!

 

评论
0/200