Condividi tramite


Verifica del pacchetto NuGet firmato

È 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 Microsoft e contengono gli stessi certificati di firma del codice e timestamp 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:

  • Quando la verifica implicita durante le operazioni di ripristino è abilitata per impostazione predefinita.
  • Come abilitarlo.
  • Quali archivi radice vengono utilizzati.

Finestre

La verifica è sempre abilitata durante le operazioni di ripristino dei pacchetti.

NuGet usa l'archivio radice predefinito su Windows, che già supporta la firma del codice e l'apposizione di marca temporale per uso generale. 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 partecipare, impostare la variabile di ambiente DOTNET_NUGET_SIGNATURE_VERIFICATION su true.

A partire da .NET 8 SDK, la verifica è abilitata per impostazione predefinita. Per rinunciare, impostare la variabile d'ambiente DOTNET_NUGET_SIGNATURE_VERIFICATION su false.

Per la verifica del certificato di firma del codice, NuGet cercherà prima un pacchetto 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, ad esempio 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 la verifica riuscita; Tenere tuttavia 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 si rifarà al bundle di certificati del .NET SDK per la firma del codice.

Per la verifica dei certificati di timestamping, NuGet utilizza sempre il pacchetto di certificati del SDK .NET per il timestamping.

macOS

La verifica è disabilitata per impostazione predefinita durante le operazioni di ripristino dei pacchetti. Per partecipare, impostare la variabile di ambiente DOTNET_NUGET_SIGNATURE_VERIFICATION su 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 del .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.

Vedere anche