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 funge anche da unica fonte di verità sull'origine effettiva del pacchetto e rafforza l'autenticità del pacchetto per il consumatore. 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.

È possibile usare certificati autoemessi a scopo di test. 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

  • Se il certificato viene archiviato in un token hardware, non è consigliabile esportare il certificato. Invece, specificare le impronte digitali del certificato della famiglia SHA-2 usando l'opzione --certificate-fingerprint <SHA-2fingerprint> al posto di --certificate-path <PathToTheCertificate>.

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

    Procedura guidata di esportazione certificati

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

Firmare il pacchetto

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

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

o

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 fornisce spesso anche un URL del server di timestamp che è possibile usare per l'argomento Timestamper facoltativo illustrato in precedenza. Consultare la documentazione del provider e/o il supporto per l'URL del servizio.

  • È possibile usare un certificato disponibile nell'archivio certificati o usare un certificato da un file. Consulta la documentazione CLI per nuget sign.
  • I pacchetti firmati devono includere un timestamp per assicurarsi che la firma rimanga valida quando il certificato di firma è scaduto. In caso contrario, l'operazione di firma genererà un avviso.
  • È possibile visualizzare i dettagli della firma di un determinato pacchetto usando nuget verify.

Registrare il certificato in 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. Effettua l'accesso a NuGet.org.
  2. Passare a Account settings (o Manage Organization>Edit Organization se si vuole registrare il certificato con un account organizzazione).
  3. Espandere la Certificates sezione e selezionare Register new.
  4. Esplorare e selezionare il file certificato esportato in precedenza. Certificati registrati

Annotazioni

  • Un utente può inviare più certificati e lo stesso certificato può essere registrato da più utenti.
  • Dopo che un utente ha registrato un certificato, tutti gli invii di pacchetti futuri devono 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. Una volta rimosso un certificato, i nuovi pacchetti firmati con tale certificato avranno esito negativo all'invio. I pacchetti esistenti non sono interessati.

Pubblicare il pacchetto

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

Creare un certificato di test

È possibile usare certificati autoemessi a scopo di test. Per creare un certificato autofirmato, usare il comandoNew-SelfSignedCertificate 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" 

Questo comando crea un certificato di test disponibile nell'archivio certificati personale dell'utente corrente. È possibile aprire l'archivio certificati eseguendo certmgr.msc per visualizzare il certificato appena creato.

Avvertimento

NuGet.org non accetta pacchetti firmati con certificati autocertificati.

Gestire i requisiti di firma per il tuo pacchetto su NuGet.org

  1. Effettua l'accesso a NuGet.org.

  2. Passare a Manage PackagesConfigurare i firmatari di pacchetti

  • 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 usare i certificati del proprietario "Any" per firmare il pacchetto. In qualità di co-proprietario del pacchetto, è possibile sostituire "Any" con se stessi o con qualsiasi altro co-proprietario per designare il firmatario richiesto. Se si crea un proprietario che non dispone di alcun certificato registrato, verranno consentiti pacchetti non firmati.

  • Analogamente, se l'opzione predefinita "Any" è selezionata per un pacchetto in cui un proprietario ha un certificato registrato e un altro proprietario non dispone di alcun certificato registrato, NuGet.org accetta un pacchetto firmato con una firma registrata da uno dei suoi proprietari o un pacchetto non firmato (perché uno dei proprietari non dispone di alcun certificato registrato).