Condividi tramite


Firmare un pacchetto NuGet

Un pacchetto firmato consente controlli di verifica dell'integrità del contenuto, che forniscono protezione contro la manomissione del contenuto. La firma del pacchetto, inoltre, funge da single source of truth riguardo all'origine del pacchetto e ne attesta l'autenticità presso il consumer. Questa guida presuppone che sia già stato creato un pacchetto.

Ottenere un certificato di firma del codice

I certificati validi possono essere ottenuti da un'autorità di certificazione pubblica, ad esempio:

L'elenco completo delle autorità di certificazione attendibili da Windows può essere ottenuto anche da http://aka.ms/trustcertpartners.

A scopo di test è possibile usare l'autocertificazione. Tuttavia, i pacchetti firmati con certificati autocertificati non vengono accettati da NuGet.org. Altre informazioni sulla creazione di un certificato di test

Esportare il file del certificato

  • È possibile esportare un certificato esistente in formato DER binario usando Esportazione guidata certificati.

    Certificate Export Wizard

  • È anche possibile esportare il certificato usando il comando Export-Certificate di PowerShell.

Firmare il pacchetto

Firmare il pacchetto usando il segno nuget dotnet (richiede .NET 6.0.100 SDK o versione successiva).

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

or

Firmare il pacchetto con il segno nuget (richiede nuget.exe 4.6.0 o versione successiva):

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

Suggerimento

Il provider di certificati offre spesso anche un URL del server di timestamp che è possibile usare per l'argomento facoltativo Timestamper mostrato in precedenza. Consultare la documentazione e/o rivolgersi al supporto tecnico del provider per ottenere tale URL del servizio.

  • È possibile usare un certificato disponibile nell'archivio certificati o usare un certificato da un file. Vedere Informazioni di riferimento sull'interfaccia della riga di comando per il comando sign di NuGet.
  • I pacchetti firmati devono includere un timestamp per assicurarsi che la firma rimanga valida dopo la scadenza del certificato di firma. In caso contrario, l'operazione di firma genera un avviso.
  • Per visualizzare i dettagli della firma di un determinato pacchetto, usare il comando verify di NuGet.

Registrare il certificato su NuGet.org

Per pubblicare un pacchetto firmato, è prima necessario registrare il certificato con NuGet.org. È necessario il certificato come .cer file in un formato DER binario.

  1. Eseguire l'accesso a NuGet.org.
  2. Passare a Account settings oppure a Manage Organization>Edit Organization se si desidera registrare il certificato con un account aziendale.
  3. Espandere la sezione Certificates e selezionare Register new.
  4. Individuare e selezionare il file di certificato esportato in precedenza. Registered Certificates

Nota

  • Un utente può inviare più certificati e lo stesso certificato può essere registrato da più utenti.
  • Una volta che un utente dispone di un certificato registrato, tutti i pacchetti futuri inviati dovranno obbligatoriamente essere firmati con uno dei certificati. Vedere Gestire i requisiti di firma per il pacchetto in NuGet.org
  • Gli utenti possono anche rimuovere un certificato registrato dall'account. Se un certificato è stato rimosso, i nuovi pacchetti firmati con tale certificato non potranno essere inviati. I pacchetti esistenti non subiscono conseguenze.

Pubblicare il pacchetto

È ora possibile pubblicare il pacchetto in NuGet.org. Vedere Pubblicazione di pacchetti.

Creare un certificato di test

A scopo di test è possibile usare l'autocertificazione. Per creare un'autocertificazione, usare il comando New-SelfSignedCertificate di PowerShell.

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" 

Il comando crea un certificato di test e lo rende disponibile nell'archivio certificati personali dell'utente corrente. Per visualizzare il certificato appena creato, aprire l'archivio certificati eseguendo certmgr.msc.

Avviso

NuGet.org non accetta pacchetti firmati con autocertificazione.

Gestire i requisiti di firma per il pacchetto in NuGet.org

  1. Eseguire l'accesso a NuGet.org.

  2. Passare a Manage PackagesConfigure package signers

  • Se si è l'unico proprietario di un pacchetto, si è il firmatario necessario, ovvero è possibile usare uno qualsiasi dei certificati registrati per firmare e pubblicare i pacchetti in NuGet.org.

  • Se un pacchetto ha più proprietari, per impostazione predefinita, è possibile firmare il pacchetto usando i certificati di "Qualsiasi" proprietario. In qualità di comproprietario del pacchetto, l'utente può indicare se stesso o un altro comproprietario come firmatario richiesto. Se si configura un proprietario che non ha alcun certificato registrato, saranno ammessi i pacchetti non firmati.

  • Analogamente, se l'opzione predefinita "Qualsiasi" è selezionata per un pacchetto in cui un proprietario dispone di un certificato registrato e un altro proprietario non ha alcun certificato registrato, NuGet.org accetterà sia un pacchetto firmato con una firma registrata da uno dei proprietari sia un pacchetto non firmato, dal momento che uno dei proprietari non ha alcun certificato registrato.