Vérification des packages NuGet signés

Vous pouvez signer un package NuGet pour permettre aux consommateurs du package de valider l’authenticité et l’intégrité du package. Si la vérification est activée, .NET vérifie les packages signés lors d’une opération de restauration de package, qui se produit automatiquement quand un consommateur du package génère ou exécute son projet.

Les signatures des packages NuGet sont basées sur des certificats X.509. Un prérequis de la vérification des packages signés est un magasin racine de certificats valide pour la signature de code et l’horodatage.

À compter du SDK .NET 6.0.400, NuGet utilise les bundles de certificats inclus dans le kit SDK .NET pour vérifier les packages signés quand aucun magasin racine système approprié n’est disponible. Ces bundles proviennent du Microsoft Trusted Root Program ; ils contiennent les mêmes certificats de signature de code et d’horodatage que le magasin racine sur Windows. Ces bundles de certificats doivent contenir l’ensemble des certificats racines nécessaires pour vérifier les packages à partir de NuGet.org.

Certaines commandes NuGet, comme sign et verify, effectuent toujours la vérification des packages signés.

Les sections suivantes pour chaque système d’exploitation expliquent :

  • Quand la vérification implicite durant les opérations de restauration est activée par défaut.
  • Comment l’activer.
  • Quels magasins racines sont utilisés.

Windows

La vérification est toujours activée durant les opérations de restauration de package.

NuGet utilise le magasin racine par défaut sur Windows, qui prend déjà en charge les opérations standard de signature de code et d’horodatage. Les bundles de certificats du kit SDK .NET ne sont pas utilisés. Toutes les fonctionnalités de vérification de package signé sont prises en charge sur Windows dans la version du SDK .NET dans laquelle elles ont été introduites.

Linux

Important

Bien que la fonctionnalité de vérification de package signé ait été ajoutée dans le SDK .NET 5, la fonctionnalité n’est pas prise en charge sur Linux tant que le SDK .NET 6.0.400 n’est pas pris en charge. N’utilisez pas la vérification de package signé avec les versions du Kit de développement logiciel (SDK) .NET antérieures à la version 6.0.400.

Avant le kit de développement logiciel (SDK) .NET 8, la vérification est désactivée par défaut durant les opérations de restauration de package. Pour l’activer, définissez la variable d’environnement DOTNET_NUGET_SIGNATURE_VERIFICATION à true.

À compter du kit de développement logiciel (SDK) .NET 8, la vérification est activée par défaut. Pour la désactiver, définissez la variable d’environnement DOTNET_NUGET_SIGNATURE_VERIFICATION à false.

Pour la vérification du certificat de signature de code, NuGet sonde d’abord un bundle de certificats à l’emplacement suivant :

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

Si un bundle de certificats valide est trouvé, NuGet le préfère au bundle de certificats du kit SDK .NET pour la signature de code. S’il contient au moins le même ensemble de certificats racines que le bundle de certificats du  SDK .NET, la vérification du package NuGet signé doit réussir. S’il manque des certificats racines, comme ceux utilisés dans les packages signés sur NuGet.org, la vérification des packages signés NuGet échoue avec un état non approuvé (via NU3018 ou NU3028). L’ajout de certificats racines à ce bundle de certificats peut permettre une vérification réussie. Toutefois, gardez à l’esprit que ce bundle de certificats est un magasin de confiance à l’échelle du système, alors que les bundles de certificats du kit SDK .NET sont utilisés comme un magasin de confiance à l’échelle de l’application.

Si un bundle de certificats valide est introuvable à l’emplacement ci-dessus, NuGet repasse à l’utilisation du bundle de certificats du kit SDK .NET pour la signature de code.

Pour la vérification du certificat d’horodatage, NuGet utilise toujours le bundle de certificats du kit SDK .NET pour l’horodatage.

macOS

La vérification est désactivée par défaut durant les opérations de restauration de package. Pour l’activer, définissez la variable d’environnement DOTNET_NUGET_SIGNATURE_VERIFICATION à true. Toutefois, nous vous recommandons de ne pas activer la vérification. Pour plus d’informations, consultez NuGet/Home#11985 et NuGet/Home#11986.

NuGet utilise uniquement les bundles de certificats du kit SDK .NET.

Important

Bien que la fonctionnalité de vérification de package signé ait été ajoutée dans le SDK .NET 5, la fonctionnalité n’est actuellement pas prise en charge sur macOS. N’utilisez pas la vérification de package signé avec les versions du Kit de développement logiciel (SDK) .NET antérieures à la version 6.0.400. Laissez-le désactivé par défaut.

Voir aussi