ASP.NET Core 2.1 : 十三.httpClient.GetAsync 報SSL錯誤的問題

FlyLolo發表於2018-08-10

不知什麼時候 ,出現了這樣的一個奇怪問題,簡單的httpClient.GetAsync(“xxxx”)居然報錯了。(ASP.NET Core 系列目錄

一、問題描述

把原來的程式從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。希望新版本中 早點把這個問題修復。

 

相關文章