Compartir vía


Comprobación del paquete firmado de NuGet

Puede firmar un paquete NuGet para permitir que los consumidores de paquetes validen la autenticidad e integridad del paquete. 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 un consumidor de paquetes compila o ejecuta su proyecto.

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

A partir del SDK de .NET 6.0.400, NuGet usa agrupaciones de certificados incluidas en el SDK de .NET para comprobar los paquetes firmados en los que un almacén raíz del sistema adecuado no está disponible. Estos paquetes se obtienen 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 en Windows. Estos conjuntos de certificados deben contener todos los certificados raíz necesarios para comprobar los paquetes de NuGet.org.

Algunos comandos de NuGet, como sign y verify, siempre realizan la comprobación del paquete firmado.

En las secciones siguientes para cada sistema operativo se describe:

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

Windows

La comprobación siempre está habilitada durante las operaciones de restauración de paquetes.

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

Linux

Importante

Aunque la funcionalidad de comprobación de paquetes firmados se agregó en el SDK de .NET 5, la funcionalidad no se admite en 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 participar, 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 no participar, establezca la variable de entorno DOTNET_NUGET_SIGNATURE_VERIFICATION en false.

En el caso de la comprobación del certificado 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 un paquete de certificados válido, NuGet lo prefiere sobre el paquete de certificados del SDK de .NET para la firma de código. Si contiene al menos el mismo conjunto de certificados raíz que la agrupación de certificados del SDK de .NET, la comprobación del paquete firmado de NuGet debe realizarse correctamente. Si carece de certificados raíz, como los usados en paquetes firmados en NuGet.org, se producirá un error en la comprobación del paquete firmado de NuGet con un estado que no es de confianza (a través de NU3018 o NU3028). Agregar certificados raíz a este conjunto de certificados puede habilitar la comprobación correcta; Sin embargo, tenga en cuenta que este conjunto de certificados es un almacén de confianza para todo el sistema, mientras que los conjuntos 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 volverá a usar el paquete 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 participar, establezca la variable de entorno DOTNET_NUGET_SIGNATURE_VERIFICATION en true. Sin embargo, se recomienda no habilitar la comprobación. Para obtener más información, vea NuGet/Home#11985 y NuGet/Home#11986.

NuGet usa solo los conjuntos de certificados del SDK de .NET.

Importante

Aunque la funcionalidad de comprobación del paquete firmado se agregó en el SDK de .NET 5, la funcionalidad no se admite actualmente en 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