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

GitLab CI构建Docker镜像时出现NuGet源加载失败、SSL证书无效错误

问题根因

你遇到的SSL证书无效报错核心原因是两个:

  1. Ubuntu 20.04(对应镜像tag的focal版本)的update-ca-certificates工具默认仅扫描/usr/local/share/ca-certificates目录下后缀为.crt的证书文件,你当前将证书存放在/etc/ssl/certs下不会被导入系统信任列表
  2. .NET Core 3.1 SDK默认优先使用自带的CA证书列表,不会主动读取系统更新后的信任证书,需要通过环境变量强制指定使用系统CA存储
可行解决方案

直接修改Dockerfile如下即可:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-focal AS build
# 将证书复制到系统CA扫描目录
COPY ./CIdependencies/zscaler-rootca.cer /usr/local/share/ca-certificates/zscaler-rootca.cer
COPY ./CIdependencies/zscaler-nuget.cer /usr/local/share/ca-certificates/zscaler-nuget.cer
WORKDIR /usr/local/share/ca-certificates
# 转换证书格式,统一为crt后缀
RUN openssl x509 -inform DER -in zscaler-nuget.cer -out zscaler-nuget.crt \
    && openssl x509 -inform PEM -in zscaler-rootca.cer -out zscaler-rootca.crt \
    # 清理原始cer文件避免干扰
    && rm *.cer \
    # 强制更新系统CA信任列表
    && update-ca-certificates -f
# 强制.NET使用系统CA证书存储
ENV DOTNET_SYSTEM_NET_HTTP_USE_CA_CERTIFICATES_ENVIRONMENT_VARIABLE=1
ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
WORKDIR /src
COPY ["apps.csproj", ""]
RUN dotnet restore "./apps.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "apps.csproj" -c Release -o /app/build
RUN dotnet publish "apps.csproj" -c Release -o /app/publish
额外验证方案

如果修改后仍然报错,可以先通过临时添加跳过证书校验的参数定位问题(仅用于测试,禁止生产环境使用):
在dotnet restore命令后添加参数:--disable-parallel --configfile <(echo '<configuration><packageSources><add key="nuget" value="https://api.nuget.org/v3/index.json"/></packageSources><runtime><AppContextSwitchOverrides value="System.Net.Http.UseSocketsHttpHandler=false"/></runtime></configuration>')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:24:01