Überprüfung des signierten NuGet-Pakets

Sie können ein NuGet-Paket signieren, damit Paket-Consumer die Echtheit und Integrität des Pakets überprüfen können. Wenn die Überprüfung aktiviert ist, überprüft .NET signierte Pakete während eines Paketwiederherstellungsvorgangs, der automatisch auftritt, wenn ein Paket-Consumer das Projekt erstellt oder ausführt.

NuGet-Paketsignaturen basieren auf X.509-Zertifikaten. Eine Voraussetzung für die Überprüfung signierter Pakete ist ein Zertifikatstammspeicher, der sowohl für das Codesignieren als auch für den Zeitstempel gültig ist.

Ab dem .NET 6.0.400 SDK verwendet NuGet Zertifikatpakete, die im .NET SDK enthalten sind. So können signierte Pakete überprüft werden, wenn kein geeigneter Systemstammspeicher verfügbar ist. Diese Pakete stammen aus dem Microsoft Trusted Root Program und enthalten die gleichen Zertifikate für das Codesignieren und für Zeitstempel wie der Stammspeicher unter Windows. Diese Zertifikatpakete sollten alle Stammzertifikate enthalten, die zum Überprüfen von Paketen auf NuGet.org erforderlich sind.

Einige NuGet-Befehle wie sign und verify führen immer die Überprüfung signierter Pakete durch.

In den folgenden Abschnitten für jedes Betriebssystem wird beschrieben:

  • wann die implizite Überprüfung bei Wiederherstellungsvorgängen standardmäßig aktiviert ist
  • wie sie aktiviert wird
  • welche Stammspeicher verwendet werden

Windows

Die Überprüfung ist bei Paketwiederherstellungsvorgängen immer aktiviert.

NuGet verwendet den Standardstammspeicher unter Windows, der bereits allgemeines Codesignieren und Zeitstempel unterstützt. .NET SDK-Zertifikatpakete werden nicht verwendet. Alle Funktionen zur Überprüfung signierter Pakete werden unter Windows in der .NET SDK-Version unterstützt, in der sie eingeführt wurden.

Linux

Wichtig

Obwohl die Funktionen zur Überprüfung signierter Pakete in .NET 5 SDKs hinzugefügt wurde, werden die Funktionen unter Linux erst ab dem .NET 6.0.400 SDK unterstützt. Verwenden Sie die Überprüfung signierter Pakete nicht mit .NET SDK-Versionen vor 6.0.400.

Vor dem .NET 8 SDK ist die Überprüfung bei Paketwiederherstellungsvorgängen standardmäßig deaktiviert. Legen Sie zum Aktivieren die Umgebungsvariable DOTNET_NUGET_SIGNATURE_VERIFICATION auf true fest.

Ab dem .NET 8 SDK ist die Überprüfung standardmäßig aktiviert. Legen Sie zum Deaktivieren die Umgebungsvariable DOTNET_NUGET_SIGNATURE_VERIFICATION auf false fest.

Für die Überprüfung des Codesignaturzertifikats sucht NuGet zunächst am folgenden Speicherort nach einem Zertifikatpaket:

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

Wenn ein gültiges Zertifikatpaket gefunden wird, zieht NuGet es dem Zertifikatpaket des .NET SDK für die Codesignierung vor. Wenn es mindestens denselben Satz von Stammzertifikaten wie das Zertifikatpaket des .NET SDK enthält, sollte die Überprüfung signierter NuGet-Pakete erfolgreich sein. Wenn Stammzertifikate fehlen, wie sie in signierten Paketen auf NuGet.org verwendet werden, schlägt die Überprüfung signierter NuGet-Pakete mit dem Status „Nicht vertrauenswürdig“ (über NU3018 oder NU3028) fehl. Das Hinzufügen von Stammzertifikaten zu diesem Zertifikatpaket kann eine erfolgreiche Überprüfung ermöglichen. Beachten Sie jedoch, dass es sich bei diesem Zertifikatpaket um einen systemweiten Vertrauensspeicher handelt, während .NET SDK-Zertifikatpakete als anwendungsweiter Vertrauensspeicher verwendet werden.

Wenn am obigen Speicherort kein gültiges Zertifikatpaket gefunden wird, greift NuGet auf das Zertifikatpaket des .NET SDK für die Codesignierung zurück.

Für die Überprüfung des Zeitstempelzertifikats verwendet NuGet immer das Zertifikatpaket des .NET SDK für Zeitstempel.

macOS

Die Überprüfung ist bei Paketwiederherstellungsvorgängen standardmäßig deaktiviert. Legen Sie zum Aktivieren die Umgebungsvariable DOTNET_NUGET_SIGNATURE_VERIFICATION auf true fest. Es wird jedoch empfohlen, die Überprüfung nicht zu aktivieren. Weitere Informationen finden Sie unter NuGet/Home#11985 und NuGet/Home#11986.

NuGet verwendet nur die .NET SDK-Zertifikatpakete.

Wichtig

Obwohl die Funktionen zur Überprüfung signierter Pakete in .NET 5 SDKs hinzugefügt wurde, werden die Funktionen derzeit unter macOS nicht unterstützt. Verwenden Sie die Überprüfung signierter Pakete nicht mit .NET SDK-Versionen vor 6.0.400. Lassen Sie diese Option standardmäßig deaktiviert.

Siehe auch