Signer un package NuGet

Un package signé permet de contrôler et vérifier l’intégrité du contenu, ce qui offre une protection contre la falsification de contenu. La signature du package sert également de source unique de vérité sur l’origine réelle du package et renforce l’authenticité du package pour le consommateur. Ce guide part du principe que vous avez déjà créé un package.

Obtenir un certificat de signature de code

Des certificats valides peuvent être obtenus auprès d’une autorité de certification publique, comme par exemple :

Vous pouvez également obtenir la liste complète des autorités de confiance approuvées par Windows sur http://aka.ms/trustcertpartners.

Vous pouvez utiliser des certificats auto-émis à des fins de test. Cependant, les packages signés avec des certificats auto-émis ne sont pas acceptés par NuGet.org. En savoir plus sur la création d’un certificat de test

Exporter le fichier de certificat

  • Vous pouvez exporter un certificat existant à un format DER binaire avec l’Assistant Exportation de certificat.

    Certificate Export Wizard

  • Vous pouvez également exporter le certificat avec la commande PowerShell Export-Certificate.

Signer le package

Signez le package à l’aide de dotnet-nuget sign (nécessite le Kit de développement logiciel (SDK) .NET 6.0.100 ou version ultérieure).

dotnet nuget sign MyPackage.nupkg --certificate-path <PathToTheCertificate> --timestamper <TimestampServiceURL>

or

Signez le package à l’aide de nuget sign (nécessite nuget.exe 4.6.0 ou version ultérieure) :

nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>

Conseil

Le fournisseur de certificats fournit souvent l’URL d’un serveur d’horodatage que vous pouvez utiliser pour l’argument facultatif Timestamper indiqué ci-dessus. Consultez la documentation et/ou contactez le support de votre fournisseur pour obtenir cette URL de service.

  • Vous pouvez utiliser un certificat disponible dans le magasin de certificats ou utiliser un certificat provenant d’un fichier. Consultez les informations de référence sur CLI pour nuget sign.
  • Les packages signés doivent inclure un horodatage pour vérifier que la signature est valide après expiration du certificat de signature. Sinon, l’opération de signature produit un avertissement.
  • Vous pouvez voir les détails de la signature d’un package donné avec nuget verify.

Inscrire le certificat sur NuGet.org

Pour publier un package signé, vous devez d’abord inscrire le certificat auprès de NuGet.org. Vous avez besoin du certificat en tant que fichier .cer au format DER binaire.

  1. Connectez-vous à NuGet.org.
  2. Accédez à Account settings (ou à Manage Organization>Edit Organization si vous voulez inscrire le certificat auprès d’un compte d’organisation).
  3. Développez la section Certificates, puis sélectionnez Register new.
  4. Accédez au fichier de certificat qui a été exporté précédemment. Registered Certificates

Remarque

  • Un même utilisateur peut envoyer plusieurs certificats et le même certificat peut être inscrit par plusieurs utilisateurs.
  • Une fois qu’un utilisateur a un certificat inscrit, tous les envois de package ultérieurs doivent être signés avec un des certificats. Consultez Gérer les exigences de signature de votre package sur NuGet.org
  • Les utilisateurs peuvent également supprimer du compte un certificat inscrit. Une fois qu’un certificat est supprimé, l’envoi de nouveaux packages signés avec ce certificat échoue. Les packages existants ne sont pas affectés.

Publier le package

Vous êtes maintenant prêt à publier le package sur NuGet.org. Voir Publication de package.

Créer un certificat de test

Vous pouvez utiliser des certificats auto-émis à des fins de test. Pour créer un certificat auto-émis, utilisez la commande PowerShell New-SelfSignedCertificate.

New-SelfSignedCertificate -Subject "CN=NuGet Test Developer, OU=Use for testing purposes ONLY" `
                          -FriendlyName "NuGetTestDeveloper" `
                          -Type CodeSigning `
                          -KeyUsage DigitalSignature `
                          -KeyLength 2048 `
                          -KeyAlgorithm RSA `
                          -HashAlgorithm SHA256 `
                          -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
                          -CertStoreLocation "Cert:\CurrentUser\My" 

Cette commande crée un certificat de test disponible dans le magasin de certificats personnel de l’utilisateur actuel. Vous pouvez ouvrir le magasin de certificats en exécutant certmgr.msc pour voir le certificat nouvellement créé.

Avertissement

NuGet.org n’accepte pas les packages signés avec des certificats auto-émis.

Gérer les exigences de signature de votre package sur NuGet.org

  1. Connectez-vous à NuGet.org.

  2. Accédez à Manage PackagesConfigure package signers

  • Si vous êtes l’unique propriétaire d’un package, vous êtes le signeur requis. Autrement dit, vous pouvez utiliser un des certificats inscrits pour signer et publier vos packages sur NuGet.org.

  • Si un package a plusieurs propriétaires, par défaut, les certificats du propriétaire « N’importe lequel » peuvent être utilisés pour signer le package. En tant que copropriétaire du package, vous pouvez remplacer « N’importe lequel » par vous-même ou par n’importe quel autre copropriétaire pour en faire le signataire obligatoire. Si vous déclarez un propriétaire qui n’a aucun certificat inscrit, les packages non signés sont autorisés.

  • De même, si l’option par défaut « N’importe lequel » est sélectionnée pour un package où un propriétaire a un certificat inscrit et où un autre propriétaire n’a aucun certificat inscrit, NuGet.org accepte un package signé avec une signature inscrite par un de ses propriétaires ou un package non signé (un des propriétaires n’ayant aucun certificat inscrit).