Signierte Pakete

Erfordert NuGet 4.6.0+ und Visual Studio 2017 Version 15.6 oder höher unter Windows.

NuGet-Pakete können eine digitale Signatur enthalten, die Schutz vor manipulierten Inhalten bietet. Diese Signatur wird aus einem X.509-Zertifikat erstellt, das auch Echtheitsnachweise zum tatsächlichen Ursprung des Pakets hinzufügt.

Signierte Pakete stellen die stärkste End-to-End-Überprüfung bereit. Es gibt zwei Arten von NuGet Signaturen:

  • Signatur des Autors. Eine Autorsignatur garantiert, dass das Paket nicht geändert wurde, seit der Autor das Paket signiert hat, unabhängig davon, welches Repository oder welche Transportmethode das Paket übermittelt wird. Darüber hinaus stellen autorsignierte Pakete einen zusätzlichen Authentifizierungsmechanismus für die nuget.org Veröffentlichungspipeline bereit, da das Signaturzertifikat vorab registriert werden muss. Weitere Informationen finden Sie unter Registrieren von Zertifikaten.
  • Repository-Signatur Repositorysignaturen bieten eine Integritätsgarantie für alle Pakete in einem Repository, unabhängig davon, ob sie autoriert sind oder nicht, auch wenn diese Pakete von einem anderen Speicherort als dem ursprünglichen Repository abgerufen werden, in dem sie signiert wurden.

Ausführliche Informationen zum Erstellen eines signierten Autorpakets finden Sie unter Signierungspakete und den Nuget-Signierbefehl. Sie können die Signaturen von Paketen mithilfe der dotnet nuget verify – oder nuget verify-Befehle überprüfen .

Wichtig

Signaturpakete für Autoren werden derzeit nur von nuget.exe unter Windows unterstützt. Alle pakete, die in nuget.org hochgeladen wurden, werden jedoch automatisch als Repository signiert.

Zertifikatanforderungen

Für die Paketsignierung ist ein Codesignaturzertifikat erforderlich, bei dem es sich um einen speziellen Zertifikattyp handelt, der für den id-kp-codeSigning Zweck gültig ist [RFC 5280 Section 4.2.1.12]. Darüber hinaus muss das Zertifikat eine RSA-Länge von 2048 Bits oder höher aufweisen.

Zeitstempelanforderungen

Signierte Pakete sollten einen RFC 3161-Zeitstempel enthalten, um die Gültigkeit der Signatur über den Gültigkeitszeitraum des Paketsignaturzertifikats hinaus sicherzustellen. Das zum Signieren des Zeitstempels verwendete Zertifikat muss für den id-kp-timeStamping Zweck gültig sein [RFC 5280 Section 4.2.1.12]. Darüber hinaus muss das Zertifikat eine RSA-Länge von 2048 Bits oder höher aufweisen.

Weitere technische Details finden Sie in den technischen Spezifikationen der Paketsignatur (GitHub).

Signaturanforderungen für NuGet.org

nuget.org verfügt über zusätzliche Anforderungen für die Annahme eines signierten Pakets:

  • Die primäre Signatur muss eine Autorsignatur sein.
  • Die primäre Signatur muss über einen einzelnen gültigen Zeitstempel verfügen.
  • Die X.509-Zertifikate für die Signatur des Autors und ihre Zeitstempelsignatur:
    • Muss über einen öffentlichen RSA-Schlüssel 2048 bits oder höher verfügen.
    • Muss innerhalb des Gültigkeitszeitraums pro aktueller UTC-Zeit zum Zeitpunkt der Paketüberprüfung am nuget.org liegen.
    • Muss mit einer vertrauenswürdigen Stammzertifizierungsstelle verkettet werden, die standardmäßig unter Windows vertrauenswürdig ist. Pakete, die mit selbst ausgestellten Zertifikaten signiert sind, werden abgelehnt.
    • Muss für seinen Zweck gültig sein:
      • Das Signaturzertifikat des Autors muss für die Codesignatur gültig sein.
      • Das Zeitstempelzertifikat muss für die Zeitstempelung gültig sein.
    • Darf zur Signierzeit nicht widerrufen werden. (Dies ist möglicherweise zur Übermittlungszeit nicht bekannt, sodass nuget.org in regelmäßigen Abständen den Sperrstatus erneut überprüft).