解决 dotnet restore NuGet 报证书错误的问题

发布于 2020-02-17  392 次阅读


刚给服务器装好 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~


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


寻找属于自己的1%