Mientras realizaba una compilación de Docker en mi proyecto .NET Core, recibí el siguiente error en todos mis NuGets:
80.19 /app/GradingTool.Tests/GradingTool.Tests.csproj: error NU3028: paquete 'Microsoft.EntityFrameworkCore 5.0.0' de la fuente 'https://api.nuget.org/v3/index.json': la firma principal del autor la marca de tiempo encontró un problema de creación de cadena: UntrustedRoot: certificado autofirmado en la cadena de certificados [/app/GradingTool.sln]
#12 80.20 /app/GradingTool.Tests/GradingTool.Tests.csproj: error NU3037: Paquete 'Microsoft.EntityFrameworkCore 5.0.0' de la fuente 'https://api.nuget.org/v3/index.json': El autor el período de validez de la firma principal ha expirado. [/app/GradingTool.sln]
#12 80.20 /app/GradingTool.Tests/GradingTool.Tests.csproj: error NU3028: Paquete 'Microsoft.EntityFrameworkCore 5.0.0' de la fuente 'https://api.nuget.org/v3/index.json': El repositorio la marca de tiempo de la contrafirma encontró un problema de creación de cadena: UntrustedRoot: certificado autofirmado en la cadena de certificados [/app/GradingTool.sln]
Nunca tuve este error antes, ¿alguien puede ayudarme a descubrir cuál es el problema?
archivo acoplable:
FROM mcr.microsoft.com/dotnet/sdk:latest AS build-env WORKDIR /app RUN apt-get update -yq \ && apt-get install curl gnupg -yq \ && curl -sL https://deb.nodesource.com/setup_10.x | bash \ && apt-get install nodejs -yq # Copy csproj and restore as distinct layers COPY . ./ RUN dotnet restore RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:latest RUN apt-get update \ && apt-get install -y --no-install-recommends libgdiplus libc6-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=build-env /app/out . ENV ASPNETCORE_URLS="http://+:4200" ENV ASPNETCORE_ENVIRONMENT="Production" ENV GOOGLE_APPLICATION_CREDENTIALS="Credentials/SchoolTools-e9f260bdf56e.json" ENV VIRTUAL_HOST="eva.schooltools.lu,www.eva.schooltools.lu,schooltools.lu,www.schooltools.lu" ENV LETSENCRYPT_HOST="eva.schooltools.lu,www.eva.schooltools.lu,schooltools.lu,www.schooltools.lu" ENV LETSENCRYPT_EMAIL="wilson.silva@edutec.lu" EXPOSE 4200 ENTRYPOINT ["dotnet", "GradingTool.dll"]Creo que nuget.org tiene algunos problemas con su certificado. Actualmente obtengo lo siguiente para todos los paquetes NuGet de nuget.org
error NU3037: paquete 'Microsoft.NETCore.Platforms 3.1.0' del origen 'https://api.nuget.org/v3/index.json': el período de validez de la firma principal del autor ha expirado.
error NU3028: paquete 'Microsoft.AspNetCore.Metadata 3.1.2' de la fuente 'https://api.nuget.org/v3/index.json': la marca de tiempo de la contrafirma del repositorio encontró un problema de creación de cadena: UntrustedRoot: certificado autofirmado en cadena de certificados
Actualización: consulte este anuncio: https://github.com/NuGet/Announcements/issues/49
Por el momento, el problema parece estar relacionado con la imagen de Debian.
Cambie a una imagen basada en Ubuntu o Alpine en su lugar:
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build-envSiga https://github.com/NuGet/Home/issues/10491 para obtener actualizaciones.
Como ya se mencionó, las actualizaciones actuales del problema se pueden seguir aquí:
https://github.com/NuGet/Home/issues/10491
Para acortar su viaje
Las soluciones alternativas conocidas incluyen:
<config> <agregar clave="signatureValidationMode" value="aceptar" />
También puede consultar el estado aquí: https://status.nuget.org/
En el archivo Dockerfile, cambié de
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slimpara
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine¡Esto funcionó para mí!
Respuesta corta
Reemplace mcr.microsoft.com/dotnet/sdk:latest
Con mcr.microsoft.com/dotnet/sdk:5.0.102-ca-patch-buster-slim-amd64
Una vez que parcheen oficialmente el problema del certificado, vuelva a :latest.
Respuesta larga
Esto se debe a un problema en la imagen acoplable de Debian que está utilizando: mcr.microsoft.com/dotnet/sdk:latest
La etiqueta :latest usa una imagen de Debian (5.0.102-1-buster-slim-amd64) y Debian lanzó un parche que generó problemas de certificado.
El equipo de NuGet publicó nuevas imágenes preliminares de Debian que mitigan el problema del certificado CA. Vea las soluciones alternativas para problemas abiertos y reemplazos de imágenes aquí:
https://github.com/NuGet/Announcements/issues/49#issuecomment-768766265
Más adelante publicarán la versión de lanzamiento de las imágenes del SDK (una vez que el paquete de certificados ca de Debian se publique en Debian 10 Buster).
El uso de la etiqueta :focal (Ubuntu) también podría resolver el problema para su aplicación .NET, aunque debe considerar que ya no está usando Debian.
ÚLTIMA ACTUALIZACIÓN: Microsoft publicó imágenes acopladas parcheadas usando etiquetas convencionales como sdk:5.0. Es seguro volver de :5.0.102-ca-patch-buster-slim-amd64 a :5.0
Este cambio también funciona:
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal¡Es mejor pasar de Debian a Ubuntu y omitir Alpine ya que faltan regiones y culturas .net en Alpine! es decir, sdk: 5.0-focal es su mejor opción y, de hecho, soluciona este problema.
En caso de que no quiera cambiar su imagen base, otra forma de arreglar esto es instalar el paquete ca-certificates .
Agregue esto a su Dockerfile:
RUN echo "deb http://deb.debian.org/debian bullseye main" >> /etc/apt/sources.list \ && apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && sed -i '$ d' /etc/apt/sources.listPor supuesto, esto puede eliminarse nuevamente tan pronto como se solucione el problema subyacente.
Encontré el siguiente error en dotnet sdk 5.0.201.
error NU3037: paquete 'Microsoft.EntityFrameworkCore.Sqlite 5.0.0' del origen 'https://api.nuget.org/v3/index.json': el período de validez de la contrafirma del repositorio ha expirado.
Después de actualizar el SDK a 5.0.401 y reconstruirlo, funciona bien.