Share via


Comprobación de paquetes NuGet firmados

Puede firmar un paquete NuGet para permitir que los consumidores de los paquetes validen su autenticidad e integridad. Si la comprobación está habilitada, .NET comprueba los paquetes firmados durante una operación de restauración de paquetes, que se produce automáticamente cuando el consumidor compila o ejecuta su proyecto.

Las firmas de paquetes NuGet se basan en certificados X.509, y un requisito previo para la comprobación de paquetes firmados es un almacén raíz de certificados válido para la firma de código y la marca de tiempo.

A partir del SDK .NET 6.0.400, NuGet utiliza paquetes de certificados incluidos en el SDK .NET para verificar los paquetes firmados cuando no se dispone de un almacén raíz del sistema adecuado. Estas agrupaciones proceden del programa raíz de confianza de Microsoft y contienen los mismos certificados de firma de código y marcas de tiempo que el almacén raíz de Windows. Estas agrupaciones de certificados deben contener todos los certificados raíz necesarios para comprobar los paquetes de NuGet.org.

Algunos comandos NuGet, como sign y verify, siempre realizan la verificación de paquetes firmados.

En las secciones siguientes de cada sistema operativo se describe:

  • Cuándo la comprobación implícita durante las operaciones de restauración está habilitada de forma predeterminada.
  • Cómo habilitarla.
  • Qué almacenes raíz se usan.

Windows

La verificación siempre está activada durante las operaciones de restauración de paquetes.

NuGet usa el almacén raíz predeterminado de Windows, que ya admite la firma de código y la marca de tiempo de uso general. No se usan agrupaciones de certificados del SDK de .NET. Todas las funciones de verificación de paquetes firmados son compatibles con Windows en la versión del SDK de .NET en la que se introdujeron.

Linux

Importante

Aunque la función de verificación de paquetes firmados fue agregada en los SDK de .NET 5, no es compatible con Linux hasta el SDK de .NET 6.0.400. No use la comprobación del paquete firmado con versiones del SDK de .NET anteriores a la 6.0.400.

Antes del SDK de .NET 8, la comprobación está deshabilitada de forma predeterminada durante las operaciones de restauración de paquetes. Para habilitarla, establezca la variable de entorno DOTNET_NUGET_SIGNATURE_VERIFICATION en true.

A partir del SDK de .NET 8, la comprobación está habilitada de forma predeterminada. Para deshabilitarla, establezca la variable de entorno DOTNET_NUGET_SIGNATURE_VERIFICATION en false.

En el caso de la comprobación de certificados de firma de código, NuGet sondea primero una agrupación de certificados en la siguiente ubicación:

/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

Si se encuentra una agrupación de certificados válida, NuGet la prefiere por encima de la agrupación de certificados del SDK de .NET para la firma de código. Si contiene al menos el mismo conjunto de certificados raíz que el paquete de certificados del SDK de .NET, la verificación del paquete firmado de NuGet debería realizarse correctamente. Si carece de certificados raíz, como los utilizados en los paquetes firmados en NuGet.org, NuGet firmado-paquete de verificación fallará con un estado de no confianza (a través de NU3018 o NU3028). Agregar certificados raíz a esta agrupación de certificados puede permitir la comprobación correcta; sin embargo, tenga en cuenta que esta agrupación de certificados es un almacén de confianza para todo el sistema, mientras que las agrupaciones de certificados del SDK de .NET se usan como almacén de confianza para toda la aplicación.

Si no se encuentra una agrupación de certificados válida en la ubicación anterior, NuGet recurrirá al uso de la agrupación de certificados del SDK de .NET para la firma de código.

Para la comprobación del certificado de marca de tiempo, NuGet siempre usa la agrupación de certificados del SDK de .NET para la marca de tiempo.

macOS

La comprobación está deshabilitada de forma predeterminada durante las operaciones de restauración de paquetes. Para habilitarla, establezca la variable de entorno DOTNET_NUGET_SIGNATURE_VERIFICATION en true. Pero se recomienda no habilitar la comprobación. Para más información, consulte NuGet/Home#11985 y NuGet/Home#11986.

NuGet usa solo agrupaciones de certificados del SDK de .NET.

Importante

Aunque la función de verificación de paquetes firmados ha sido agregada a los SDK de .NET 5, actualmente no es compatible con macOS. No use la comprobación del paquete firmado con versiones del SDK de .NET anteriores a la 6.0.400. Déjelo deshabilitado de forma predeterminada.

Consulte también