NuGet-verifiering av signerat paket
Du kan signera ett NuGet-paket för att göra det möjligt för paketkonsumenter att verifiera paketets äkthet och integritet. Om verifiering är aktiverat verifierar .NET signerade paket under en paketåterställningsåtgärd, vilket sker automatiskt när en paketkonsument skapar eller kör sitt projekt.
NuGet-paketsignaturer baseras på X.509-certifikat och en förutsättning för verifiering av signerat paket är ett rotarkiv för certifikat som är giltigt för både kodsignering och tidsstämpling.
Från och med .NET 6.0.400 SDK använder NuGet certifikatpaket som ingår i .NET SDK för att verifiera signerade paket där ett lämpligt systemrotarkiv inte är tillgängligt. Dessa paket kommer från Microsoft Trusted Root Program och innehåller samma kodsignerings- och tidsstämplingscertifikat som rotarkivet i Windows. Dessa certifikatpaket bör innehålla alla rotcertifikat som krävs för att verifiera paket från NuGet.org.
Vissa NuGet-kommandon, till exempel sign
och verify
, utför alltid verifiering av signerat paket.
Följande avsnitt för varje operativsystem beskriver:
- När implicit verifiering under återställningsåtgärder är aktiverat som standard.
- Så här aktiverar du det.
- Vilka rotlager används.
Windows
Verifiering aktiveras alltid under paketåterställningsåtgärder.
NuGet använder standardrotarkivet i Windows, som redan har stöd för allmän kodsignering och tidsstämpling. .NET SDK-certifikatpaket används inte. Alla verifieringsfunktioner för signerade paket stöds i Windows i den .NET SDK-version där den introducerades.
Linux
Viktigt!
Även om verifieringsfunktionen för signerade paket lades till i .NET 5 SDK:er stöds inte funktionerna i Linux förrän .NET 6.0.400 SDK. Använd inte verifiering av signerat paket med .NET SDK-versioner tidigare än 6.0.400.
Innan .NET 8 SDK inaktiveras verifieringen som standard under paketåterställningsåtgärder. Om du vill anmäla dig anger du miljövariabeln DOTNET_NUGET_SIGNATURE_VERIFICATION
till true
.
Från och med .NET 8 SDK är verifiering aktiverat som standard. Om du vill avregistrera dig anger du miljövariabeln DOTNET_NUGET_SIGNATURE_VERIFICATION
till false
.
För verifiering av kodsigneringscertifikat avsöker NuGet först ett certifikatpaket på följande plats:
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
Om ett giltigt certifikatpaket hittas föredrar NuGet det framför .NET SDK:s certifikatpaket för kodsignering. Om den innehåller minst samma uppsättning rotcertifikat som .NET SDK:s certifikatpaket bör NuGet-verifieringen av signerat paket lyckas. Om den saknar rotcertifikat, som de som används i signerade paket på NuGet.org, misslyckas NuGet-verifieringen av signerade paket med en obetrodd status (via NU3018 eller NU3028). Om du lägger till rotcertifikat i det här certifikatpaketet kan verifieringen lyckas. Tänk dock på att det här certifikatpaketet är ett systemomfattande förtroendearkiv, medan .NET SDK-certifikatpaket används som ett programomfattande förtroendearkiv.
Om ett giltigt certifikatpaket inte hittas på platsen ovan återgår NuGet till att använda .NET SDK:s certifikatpaket för kodsignering.
För tidsstämpling av certifikatverifiering använder NuGet alltid .NET SDK:s certifikatpaket för tidsstämpling.
macOS
Verifiering är inaktiverad som standard under paketåterställningsåtgärder. Om du vill anmäla dig anger du miljövariabeln DOTNET_NUGET_SIGNATURE_VERIFICATION
till true
. Vi rekommenderar dock att du inte aktiverar verifiering. Mer information finns i NuGet/Home#11985 och NuGet/Home#11986.
NuGet använder endast .NET SDK:s certifikatpaket.
Viktigt!
Verifieringsfunktionen för signerade paket har lagts till i .NET 5 SDK:er, men funktionen stöds för närvarande inte på macOS. Använd inte verifiering av signerat paket med .NET SDK-versioner tidigare än 6.0.400. Låt den vara inaktiverad som standard.