ASP.NET Core : 十三.httpClient.GetAsync 报SSL错误的问题

作者阿里云代理 文章分类 分类:linux图文教程 阅读次数 已被围观 734


一、问题描绘

把原来的程序从2.0升级到2.1,突然发现原本正常工作的httpClient.GetAsync("xxxx")竟然不工作了。

为了打扫项目中其他引证的搅扰,新建了一个洁净的2.1的项目,Main里直接调用

var client = new HttpClient(); var task = client.GetAsync(url);

仍然是报错。

错误信息如下:

System.AggregateException: One or more errors occurred. (The SSL connection could not be established, see inner exception.) ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> Interop+Crypto+OpenSslCryptographicException: error:2006D002:BIO routines:BIO_new_file:system lib  at Interop.Crypto.CheckValidOpenSslHandle(SafeHandle handle)  at Internal.Cryptography.Pal.StorePal.LoadMachineStores()  at *****************************************

原本以为是升级runtime的时分出错了,从头装置后仍然是这样。

体系环境:

OS:CentOS 7  Host (useful for support):  Version: 2.1.2  Commit:  811c3ce6c0  .NET Core runtimes installed:  Microsoft.AspNetCore.All 2.1.2 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]  Microsoft.AspNetCore.App 2.1.2 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]  Microsoft.NETCore.App 2.1.2 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

偶尔发现,通过dotnet指令工作对应的dll可以正常工作:

dotnet  ......xx/xx/test.dll

但通过 /etc/systemd/system/kestrel-test.service 这样的服务发动的情况下仍然报错。


每次都通过dotnet指令工作必定是不合适的,持续想方法。


二、解决方法

这是由于在 /etc/ssl/certs 目录下存在没有读取权限或许已损坏的文件导致的,检查一下这个文件夹确实最近几天有新文件写入,可能是最近装置什么进来的吧。


没有一个个的实验,暂时把这个文件夹的公共权限设置了可读,可以正常工作了,算是个暂时方法吧,这样开权限必定不是一个好方法,


据说在新版本中会修正, 从头刷了一下 yum update 也没有新的,官网看看也还没2.1.3的runtime。期望新版本中 早点把这个问题修正。



本公司销售:阿里云、腾讯云、百度云、天翼云、金山大米云、金山企业云盘!可签订合同,开具发票。

我有话说: