刚给服务器装好dotnet准备跑起来,发现NuGet竟然闹幺蛾子了:

> dotnet restore
/usr/share/dotnet/sdk/3.1.101/NuGet.targets(123,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/www/dotnet/xxx/xxx.csproj]
/usr/share/dotnet/sdk/3.1.101/NuGet.targets(123,5): error :   The SSL connection could not be established, see inner exception. [/www/dotnet/xxx/xxx.csproj]
/usr/share/dotnet/sdk/3.1.101/NuGet.targets(123,5): error :   The remote certificate is invalid according to the validation procedure. [/www/dotnet/xxx/xxx.csproj]

从提示信息来看,应该是根CA证书有问题,但是用update-ca-trust后也没用,OpenSSL版本也不老,再用openssh version -a检查一下证书路径也没问题。绝望之时搜到GitHub上一个讨论:
https://github.com/NuGet/Home/issues/8169#issuecomment-497591809

I found it was caused by my wrong configuration of SSL CA certificate path.
After I update openssl to 1.1.1, the CA path is modified to "/usr/local/ssl/certs", but it is an empty folder. Before updating openssl, the old version points to "/usr/lib/ssl/certs". After I manually link "/usr/local/ssl/certs" to /etc/ssl/certs. This error disappears.

检查了一下,发现好像有两个OpenSSL……咱也不知道咋回事,用的是阿里云CentOS带BT面板的镜像,真的在/usr/local/openssl/这里还有一个,dotnet用的应该是这里的,点开certs文件夹一看,果然是空的,所以我们把这个文件夹删了,然后建一个软链接到正确的证书目录:

ln -s /etc/ssl/certs /usr/local/openssl/certs

成功!

如果你也有这样的问题,记得到目录里找找是不是由于空的certs文件夹导致的。当然如果像我这样是有两个OpenSSL的奇葩情况,最好,emmm,重装一下?

Enjoy~


2021/06/02更新:

这两天迁移了服务器,跑程序起来,其中有HttpClient碰到了System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.,然后在网上找了半天也解决不了,准备加个CustomHandler,直接忽略掉所有证书判断了事,结果在编译的时候nuget报错,对,就是本文的同一个错误,我就很郁闷,看来糊一下是不行了,得彻底解决这个问题。

上谷歌搜,一搜,排名第二的,就是这篇文章……光速解决……被自己蠢哭了,自己记录下的东西还是要经常复习啊(语重心长)。

顺便再吐槽一下宝塔面板镜像,这次用的是腾讯云,没想到也有这样的问题,估计很少有人跑dotnet程序,所以没人发现吗……


本文被以下文章引用,其他作者也遇到了类似情况有不同的具体解决方法,可以参考:
Unable to load the service index for source 排错过程分享 - 云+社区 - 腾讯云

END OF RECORD返回顶部 ↑