如何为 dotnet core 和 nuget 使用非默认 ca 证书?

问题描述 投票:0回答:3

我的公司在与互联网通信时使用自己的 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 工具和库使用备用证书?

ssl .net-core nuget
3个回答
1
投票

据我了解,你们公司有一个中介,封装了与公司SSL的所有连接,因此Nuget无法信任您的SSL证书(它认为中间有一个人,导致安全漏洞)。

您可能需要检查问题#4387问题5773

您可以考虑分叉 Nuget 存储库以禁用 SSL 强制。

此外,AFAIK

SSL_CERT_DIR
SSL_CERT_FILE
从 .Net Core 2.1 开始支持环境变量 [3]


1
投票

这里稍微详细说明一下。最近一直致力于其中一个应用程序的容器化,因为使用了私有 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
停止抱怨


0
投票

我在尝试构建 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
© www.soinside.com 2019 - 2024. All rights reserved.