Verifica del pacchetto firmato NuGet

È possibile firmare un pacchetto NuGet per consentire ai consumer di pacchetti di convalidare l'autenticità e l'integrità del pacchetto. Se la verifica è abilitata, .NET verifica i pacchetti firmati durante un'operazione di ripristino del pacchetto, che si verifica automaticamente quando un consumer di pacchetti compila o esegue il progetto.

Le firme dei pacchetti NuGet sono basate su certificati X.509 e un prerequisito per la verifica del pacchetto firmato è un archivio radice del certificato valido sia per la firma del codice che per il timestamp.

A partire da .NET 6.0.400 SDK, NuGet usa bundle di certificati inclusi in .NET SDK per verificare i pacchetti firmati in cui non è disponibile un archivio radice di sistema appropriato. Questi bundle vengono originati dal programma radice attendibile Microsofte contengono gli stessi certificati timestamp e di firma del codice dell'archivio radice in Windows. Questi bundle di certificati devono contenere tutti i certificati radice necessari per verificare i pacchetti da NuGet.org.

Alcuni comandi NuGet, ad esempio sign e verify, eseguono sempre la verifica del pacchetto firmato.

Le sezioni seguenti per ogni sistema operativo descrivono quanto indicato di seguito.

  • Quando la verifica implicita durante le operazioni di ripristino è abilitata per impostazione predefinita.
  • La procedura di abilitazione.
  • Quali archivi radice vengono usati.

Finestre

La verifica è sempre abilitata durante le operazioni di ripristino del pacchetto.

NuGet usa l'archivio radice predefinito in Windows, che supporta già timestamp e firma del codice per utilizzo generico. I bundle di certificati .NET SDK non vengono usati. Tutte le funzionalità di verifica del pacchetto firmato sono supportate in Windows nella versione di .NET SDK in cui è stata introdotta.

Linux

Importante

Anche se la funzionalità di verifica del pacchetto firmato è stata aggiunta in .NET 5 SDK, la funzionalità non è supportata in Linux fino a .NET 6.0.400 SDK. Non usare la verifica del pacchetto firmato con le versioni di .NET SDK precedenti alla 6.0.400.

Prima di .NET 8 SDK, la verifica è disabilitata per impostazione predefinita durante le operazioni di ripristino dei pacchetti. Per acconsentire esplicitamente, impostare la variabile di ambiente da DOTNET_NUGET_SIGNATURE_VERIFICATION a true.

A partire da .NET 8 SDK, la verifica è abilitata per impostazione predefinita. Per rifiutare esplicitamente, impostare la variabile di ambiente daDOTNET_NUGET_SIGNATURE_VERIFICATION a false.

Per la verifica del certificato di firma del codice, NuGet eseguirà prima il probe di un bundle di certificati nel percorso seguente:

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

Se viene trovato un bundle di certificati valido, NuGet preferisce il bundle di certificati di .NET SDK per la firma del codice. Se contiene almeno lo stesso set di certificati radice del bundle di certificati di .NET SDK, la verifica del pacchetto firmato NuGet avrà esito positivo. Se non dispone di certificati radice, come quelli usati nei pacchetti firmati in NuGet.org, la verifica del pacchetto firmato NuGet avrà esito negativo con uno stato non attendibile (tramite NU3018 o NU3028). L'aggiunta di certificati radice a questo bundle di certificati può abilitare una verifica con esito positivo; tuttavia tenere presente che questo bundle di certificati è un archivio attendibilità a livello di sistema, mentre i bundle di certificati .NET SDK vengono usati come archivio attendibilità a livello di applicazione.

Se non viene trovato un bundle di certificati valido nella posizione precedente, NuGet eseguirà il fallback per l'uso del bundle di certificati di .NET SDK per la firma del codice.

Per la verifica del certificato di timestamp, NuGet usa sempre il bundle di certificati di .NET SDK per il timestamp.

macOS

La verifica viene disabilitata per impostazione predefinita durante le operazioni di ripristino dei pacchetti. Per acconsentire esplicitamente, impostare la variabile di ambiente da DOTNET_NUGET_SIGNATURE_VERIFICATION a true. Tuttavia è consigliabile non abilitare la verifica. Per altre informazioni, vedere NuGet/Home#11985 e NuGet/Home#11986.

NuGet usa solo i bundle di certificati .NET SDK.

Importante

Anche se la funzionalità di verifica del pacchetto firmato è stata aggiunta in .NET 5 SDK, la funzionalità non è attualmente supportata in macOS. Non usare la verifica del pacchetto firmato con le versioni di .NET SDK precedenti alla 6.0.400. Lasciare disabilitato per impostazione predefinita.

Vedi anche