不知什麼時候 ,出現了這樣的一個奇怪問題,簡單的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。希望新版本中 早點把這個問題修復。