You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Dockerfile中的.NET NuGet使用系统证书?

问题原因与解决方法

问题原因

  • .NET Core 7 SDK 默认采用内置根证书存储,而非直接依赖系统级证书目录,这是为了保障跨平台环境下的证书信任一致性。
  • 企业代理的SSL证书由自定义CA签发,该CA证书不在.NET SDK的内置信任列表中,因此执行dotnet restore请求NuGet源时,会触发UntrustedRoot SSL连接错误。

解决配置步骤

方法一:让.NET CLI使用系统证书

通过设置环境变量,强制.NET回退到使用系统HTTP处理器,从而读取系统证书目录的CA证书:

# 复制企业CA证书到系统证书目录
COPY company-ca.crt /usr/local/share/ca-certificates/
# 更新系统证书存储
RUN update-ca-certificates
# 设置环境变量,让.NET使用系统HTTP处理器
ENV DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0

方法二:将CA证书导入.NET SDK信任存储

直接把企业CA证书添加到.NET SDK的内置信任目录,确保dotnet restore能识别:

COPY company-ca.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates
# 创建.NET信任证书目录并复制CA证书
RUN mkdir -p /usr/share/dotnet/sdk/trustedroots/certs && \
    cp /usr/local/share/ca-certificates/company-ca.crt /usr/share/dotnet/sdk/trustedroots/certs/
# 重置并信任HTTPS证书(可选,用于验证)
RUN dotnet dev-certs https --clean && \
    dotnet dev-certs https --trust

方法三:配置NuGet单独信任CA证书

在项目根目录创建NuGet.Config文件,指定信任的CA证书:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <config>
    <add key="http_proxy" value="http://你的代理地址:端口" />
    <add key="https_proxy" value="http://你的代理地址:端口" />
  </config>
  <trustRoot>
    <certificate path="/usr/local/share/ca-certificates/company-ca.crt" />
  </trustRoot>
</configuration>

然后在Dockerfile中复制该配置到NuGet的默认配置目录:

COPY NuGet.Config /root/.nuget/NuGet/

验证方式

构建镜像时可添加以下命令,验证证书是否已被.NET信任:

RUN dotnet dev-certs https --check

内容的提问来源于stack exchange,提问作者Mazen313

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:55:18