Ein NuGet-Paket signieren

Signierte Pakete ermöglichen die Überprüfung der Integrität von Inhalten, um Inhalte vor Manipulation zu schützen. Die Paketsignatur dient auch als zentrale, vertrauenswürdige Informationsquelle in Bezug auf die tatsächliche Herkunft eines Pakets und stärkt das Vertrauen des Verbrauchers in die Echtheit des Pakets. In diesem Leitfaden wird vorausgesetzt, dass Sie bereits ein Paket erstellt haben.

Abrufen eines Codesignaturzertifikats

Gültige Zertifikate können von einer öffentlichen Zertifizierungsstelle abgerufen werden, z. B.:

Die vollständige Liste aller von Windows als vertrauenswürdig eingestuften Zertifizierungsstellen finden Sie auch unter http://aka.ms/trustcertpartners.

Sie können selbst ausgestellte Zertifikate für Testzwecke verwenden. Pakete, die mit selbst ausgestellten Zertifikaten signiert wurden, werden jedoch von NuGet.org nicht akzeptiert. Weitere Informationen zum Erstellen eines Testzertifikats.

Exportieren der Zertifikatdatei

  • Sie können ein vorhandenes Zertifikat mithilfe des Zertifikatexport-Assistenten in ein binäres DER-Format exportieren.

    Certificate Export Wizard

  • Sie können das Zertifikat auch mithilfe des PowerShell-Befehls „Export-Certificate“ exportieren.

Signieren des Pakets

Signieren Sie das Paket mit dotnet nuget sign (erfordert das .NET SDK 6.0.100 oder höher).

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

oder

Signieren Sie das Paket mithilfe des NuGet-Zeichens (erfordert „nuget.exe“ 4.6.0 oder höher):

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

Tipp

Der Zertifikatanbieter stellt häufig auch eine Zeitstempelserver-URL bereit, die Sie für das oben gezeigte optionale Argument Timestamper verwenden können. Informieren Sie sich über diese Dienst-URL anhand der Dokumentation Ihres Anbieters und/oder über dessen Support.

  • Sie können ein im Zertifikatspeicher verfügbares Zertifikat oder ein Zertifikat aus einer Datei verwenden. Informationen zu nuget sign finden Sie in der Referenz der Befehlszeilenschnittstelle.
  • Signierte Pakete sollten einen Zeitstempel enthalten, um sicherzustellen, dass die Signatur gültig bleibt, wenn das Signaturzertifikat abläuft. Andernfalls erzeugt der Signierungsvorgang eine Warnung.
  • Sie können Details der Signatur eines bestimmten Pakets mit dem NuGet-Befehl „verify“ anzeigen.

Registrieren des Zertifikats bei NuGet.org

Um ein signiertes Paket zu veröffentlichen, müssen Sie das Zertifikat zunächst bei NuGet.org registrieren. Sie benötigen das Zertifikat als .cer-Datei im binären DER-Format.

  1. Melden Sie sich bei NuGet.org an.
  2. Wechseln Sie zu Account settings (oder Manage Organization>Edit Organization, wenn Sie das Zertifikat für ein Organisationskonto registrieren möchten).
  3. Erweitern Sie den Abschnitt Certificates, und wählen Sie Register new aus.
  4. Suchen Sie nach der zuvor exportierten Zertifikatdatei, und wählen Sie sie aus. Registered Certificates

Hinweis

  • Ein Benutzer kann mehrere Zertifikate übermitteln, und ein und dasselbe Zertifikat kann von mehreren Benutzern registriert werden.
  • Sobald ein Zertifikat für einen Benutzer registriert wurde, müssen alle zukünftigen Pakete mit einem der Zertifikate angemeldet werden. Siehe Verwalten der Signaturanforderungen für Ihr Paket auf NuGet.org
  • Benutzer können ein registriertes Zertifikat auch aus dem Konto entfernen. Sobald ein Zertifikat entfernt wurde, tritt bei neuen Paketen, die mit diesem Zertifikat signiert wurden, ein Fehler auf. Vorhandene Pakete sind nicht betroffen.

Veröffentlichen des Pakets

Sie können das Paket jetzt auf NuGet.org veröffentlichen. Siehe Veröffentlichen von Paketen.

Erstellen eines Testzertifikats

Sie können selbst ausgestellte Zertifikate für Testzwecke verwenden. Um ein selbst ausgestelltes Zertifikat zu erstellen, verwenden Sie den PowerShell-Befehl „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" 

Dieser Befehl erstellt ein Testzertifikat, das im persönlichen Zertifikatspeicher des aktuellen Benutzers gespeichert wird. Sie können den Zertifikatspeicher durch Ausführen von certmgr.msc öffnen, um das neu erstellte Zertifikat anzuzeigen.

Warnung

NuGet.org akzeptiert keine Pakete, die mit selbst ausgestellten Zertifikaten signiert sind.

Verwalten der Signaturanforderungen für Ihr Paket auf NuGet.org

  1. Melden Sie sich bei NuGet.org an.

  2. Besuchen Sie Manage PackagesConfigure package signers.

  • Wenn Sie der einzige Besitzer eines Pakets sind, sind Sie der erforderliche Signaturgeber, d. h., Sie können ein beliebiges der registrierten Zertifikate verwenden, um Ihre Pakete in NuGet.org zu signieren und zu veröffentlichen.

  • Wenn ein Paket über mehrere Besitzer verfügt, können standardmäßig die Zertifikate „jedes“ Besitzers zum Signieren des Pakets verwendet werden. Als Mitbesitzer des Pakets können Sie „Jeder“ außer Kraft setzen und sich selbst oder einen beliebigen Mitbesitzer als erforderlichen Signaturgeber festlegen. Wenn Sie einen Besitzer angeben, für den kein Zertifikat registriert ist, werden nicht signierte Pakete zugelassen.

  • Ähnliches gilt, wenn die Standardoption „Jeder“ für ein Paket ausgewählt wurde, für das ein Besitzer ein Zertifikat registriert hat, ein anderer Besitzer jedoch nicht: NuGet.org akzeptiert entweder ein signiertes Paket mit einer von einem der Besitzer registrierten Signatur oder ein nicht signiertes Paket (da für einen der Besitzer kein Zertifikat registriert wurde).