我的公司在与互联网通信时使用自己的 ssl 证书,命令行例如
dotnet add package
将无法运行:
error: Unable to load the service index for source
https://api.nuget.org/v3/index.json.
error: The SSL connection could not be established, see inner exception.
error: Authentication failed, see inner exception.
error: The client and server cannot communicate, because they do not possess a common algorithm
是否有办法让 dotnet 工具和库使用备用证书?
这里稍微详细说明一下。最近一直致力于其中一个应用程序的容器化,因为使用了私有 nuget 存储库以及
nuget.org
,我们最终所做的就是复制 nuget 配置文件以及所有存储库并复制证书 crt 文件。
如果您只有一台存储库服务器(在一个域下),那么您可以使用
SSL_CERT_FILE
变量,该变量将包含证书的 crt 文件的路径。
如果您有多个存储库服务器,就像我的情况一样(nuget.org 和一个私有服务器),那么您应该使用
SSL_CERT_DIR
环境变量。它应该设置为所有存储库的证书所在的目录。通常您不需要 nuget.org 的证书。在这种情况下,您不能使用 SSL_CERT_FILE
变量的原因是,它也会在 nuget.org 上尝试,但会失败。因此,SSL_CERT_DIR
是我们案例中的解决方案,只有一个用于私人存储库的 crt 文件。
然后
dotnet restore --configfile nuget.config
停止抱怨
我在尝试构建 aspnet:7.0 docker 容器时遇到类似的问题。
我的公司有解密代理,因此所有证书都是动态生成的(中间人)。
ADD your_ca_root.crt /usr/local/share/ca-certificates/foo.crt
RUN chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates
如果运行普通的 Linux,那么这应该可以工作
copy your_ca_root.crt /usr/local/share/ca-certificates/foo.crt
chmod 644 /usr/local/share/ca-certificates/foo.crt && update-ca-certificates