Packages signés

Nécessite NuGet 4.6.0+ et Visual Studio 2017 versions 15.6 et ultérieures

Les packages NuGet peuvent inclure une signature numérique qui offre une protection contre le contenu falsifié. Cette signature est produite à partir d’un certificat X.509 qui ajoute également des preuves d’authenticité à l’origine réelle du package.

Les packages signés fournissent la validation de bout en bout la plus forte. Il existe deux types de signatures NuGet :

  • Signature de l’auteur. Une signature d’auteur garantit que le package n’a pas été modifié depuis que l’auteur a signé le package, quel que soit le référentiel ou la méthode de transport par lesquels le package est livré. En outre, les packages signés par un auteur fournissent un mécanisme d’authentification supplémentaire au pipeline de publication nuget.org, car le certificat de signature doit être inscrit à l’avance. Pour en savoir plus, consultez la section Inscrire des certificats.
  • Signature de référentiel. Les signatures de référentiel fournissent une garantie d’intégrité pour tous les packages d’un référentiel, qu’ils soient signés ou non, même si ces packages sont obtenus à partir d’un emplacement différent du dépôt d’origine où ils ont été signés.

Pour plus d’informations sur la création d’un package signé, consultez Signature de packages et la commande de signature nuget. Vous pouvez vérifier les signatures des packages à l’aide des commandes dotnet nuget verify ou nuget verify.

Important

Les packages de signature par un auteur sont pris en charge uniquement par nuget.exe sous Windows pour l’instant. Toutefois, tous les packages chargés dans nuget.org sont automatiquement signés par référentiel.

Configuration requise des certificats

La signature de package nécessite un certificat de signature de code, qui est un type spécial de certificat valide pour l’objectif id-kp-codeSigning [RFC 5280 section 4.2.1.12]. En outre, le certificat doit avoir une longueur de clé publique RSA de 2048 bits ou plus.

Exigences de l’horodateur

Les packages signés doivent inclure un horodateur RFC 3161 pour garantir la validité de la signature au-delà de la période de validité du certificat de signature de package. Le certificat utilisé pour signer l’horodateur doit être valide pour l’objectif id-kp-timeStamping [RFC 5280 section 4.2.1.12]. En outre, le certificat doit avoir une longueur de clé publique RSA de 2048 bits ou plus.

Des détails techniques supplémentaires sont disponibles dans les spécifications techniques de signature de package (GitHub).

Exigences de signature sur NuGet.org

nuget.org a des exigences supplémentaires pour accepter un package signé :

  • La signature principale doit être une signature d’auteur.
  • La signature principale doit avoir un horodateur valide unique.
  • Les certificats X.509 de la signature d’auteur et de sa signature d’horodateur :
    • Doivent avoir une clé publique RSA 2048 bits ou supérieure.
    • Doivent être dans leur période de validité selon l’heure UTC actuelle au moment de la validation du package sur nuget.org.
    • Doivent être connectés par une chaîne à une autorité racine approuvée par défaut sous Windows. Les packages signés avec des certificats auto-émis sont rejetés.
    • Le certificat doit être valide pour son objectif :
      • Le certificat de signature d’auteur doit être valide pour la signature de code.
      • Le certificat d’horodatage doit être valide pour l’horodateur.
    • Ne doit pas être révoqué au moment de la signature. (Ce point peut ne pas être connu au moment de la soumission, de sorte que nuget.org revérifie périodiquement l’état de révocation périodiquement.)