如何强制 dotnet nuget 在 dockerfile 中使用系统证书?

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

我正在尝试为我的 donet core 7 应用程序构建一个 docker 映像。 我使用公司代理,因此我将以下几行添加到我的 dockerfile 中:

FROM   mcr.microsoft.com/dotnet/sdk:7.0 AS build    
COPY ca.crt /usr/local/share/ca-certificates/ca.crt
ENV http_proxy http://proxy-server:8080
ENV https_proxy http://proxy-server:8080
ENV HTTP_PROXY http://proxy-server:8080
ENV HTTPS_PROXY http://proxy-server:8080
RUN dotnet restore "src/Api/PositionApi/PositionApi.csproj"

运行 docker build 命令时,在 nuget 包下载期间,我在

dotnet restore
命令上收到错误:

#23 1.995 信息:X.509 证书链验证将使用后备证书捆绑包 '/usr/share/dotnet/sdk/7.0.402/trustedroots/codesignctl.pem'。 #23 2.020 信息:X.509 证书链验证将使用后备证书捆绑包 '/usr/share/dotnet/sdk/7.0.402/trustedroots/timestampctl.pem'。 #23 2.024 信息:将包“Microsoft.EntityFrameworkCore”的 PackageReference 添加到项目“/src/src.csproj”中。 #23 8.825 错误:无法加载源 http://api.nuget.org/v3/index.json 的服务索引。 #23 8.825 错误:无法建立 SSL 连接,请参阅内部异常。 #23 8.825 错误:由于证书链中的错误,远程证书无效:UntrustedRoot

为什么 dotnet Restore 命令忽略我的证书?以及如何配置 dotnet cli 以使用操作系统证书而不是依赖“/usr/share/dotnet/sdk/7.0.402/trustedroots/timestampctl.pem”?

谢谢

c# docker ssl .net-core nuget
1个回答
0
投票

dotnet Restore 命令会忽略您的证书,因为它使用的是

/usr/share/dotnet/sdk/7.0.402/trustedroots/timestampctl.pem
处的后备证书捆绑包,而不是您已复制到
/usr/local/share/ca-certificates/ca.crt
的证书。

要将 dotnet CLI 配置为使用操作系统证书而不是依赖后备证书捆绑包,您可以将

DOTNET_ROOT
环境变量设置为存储操作系统证书的目录。例如,在 Linux 上,您可以将
DOTNET_ROOT
环境变量设置为
/etc/ssl/certs

这里是更新的 Dockerfile,展示了如何配置 dotnet CLI 以使用操作系统证书:

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build

COPY ca.crt /etc/ssl/certs/ca.crt

ENV DOTNET_ROOT /etc/ssl/certs
ENV http_proxy http://proxy-server:8080
ENV https_proxy http://proxy-server:8080
ENV HTTP_PROXY http://proxy-server:8080
ENV HTTPS_PROXY http://proxy-server:8080

RUN dotnet restore "src/Api/PositionApi/PositionApi.csproj"

更新 Dockerfile 后,您可以使用以下命令再次构建 docker 映像:

docker build -t position-api .

这次,dotnet Restore 命令应该能够成功下载 NuGet 包。

请注意,不建议在生产环境中禁用证书验证,因为这可能会使您的应用程序面临安全漏洞。

© www.soinside.com 2019 - 2024. All rights reserved.