Pacchetti firmati

NuGet 4.6.0+ e Visual Studio 2017 versione 15.6 e successive

I pacchetti NuGet possono includere una firma digitale che fornisce protezione da contenuti manomessi. Questa firma viene prodotta da un certificato X.509 che aggiunge anche prove di autenticità all'origine effettiva del pacchetto.

I pacchetti firmati forniscono la convalida end-to-end più avanzata. Esistono due tipi diversi di firme NuGet:

  • Firma dell'autore. Una firma dell'autore garantisce che il pacchetto non sia stato modificato dopo che l'autore ha firmato il pacchetto, indipendentemente dal repository o dal metodo di trasporto fornito dal pacchetto. Inoltre, i pacchetti firmati dall'autore forniscono un meccanismo di autenticazione aggiuntivo per la pipeline di pubblicazione nuget.org perché il certificato di firma deve essere registrato in anticipo. Per altre informazioni, vedere Registrare i certificati.
  • Firma del repository. Le firme del repository offrono una garanzia di integrità per tutti i pacchetti in un repository indipendentemente dal fatto che siano firmati o meno, anche se tali pacchetti vengono ottenuti da un percorso diverso rispetto al repository originale in cui sono stati firmati.

Per informazioni dettagliate sulla creazione di un pacchetto firmato dall'autore, vedere Firma di pacchetti e il comando di firma nuget. È possibile verificare le firme dei pacchetti usando i comandi dotnet nuget verify o nuget verify .

Importante

I pacchetti di firma dell'autore sono supportati solo da nuget.exe in Windows. Tuttavia, tutti i pacchetti caricati in nuget.org vengono firmati automaticamente dal repository.

Requisiti del certificato

La firma del pacchetto richiede un certificato di firma del codice, ovvero un tipo speciale di certificato valido per lo id-kp-codeSigning scopo [RFC 5280 sezione 4.2.1.12]. Inoltre, il certificato deve avere una lunghezza di chiave pubblica RSA di 2048 bit o superiore.

Requisiti relativi al timestamp

I pacchetti firmati devono includere un timestamp RFC 3161 per garantire la validità della firma oltre il periodo di validità del certificato di firma del pacchetto. Il certificato usato per firmare il timestamp deve essere valido per lo id-kp-timeStamping scopo [RFC 5280 sezione 4.2.1.12]. Inoltre, il certificato deve avere una lunghezza di chiave pubblica RSA di 2048 bit o superiore.

Altri dettagli tecnici sono disponibili nelle specifiche tecniche della firma del pacchetto (GitHub).

Requisiti di firma per NuGet.org

nuget.org ha requisiti aggiuntivi per l'accettazione di un pacchetto firmato:

  • La firma primaria deve essere una firma dell'autore.
  • La firma primaria deve avere un singolo timestamp valido.
  • I certificati X.509 per la firma dell'autore e la relativa firma timestamp:
    • Deve avere una chiave pubblica RSA a 2048 bit o versione successiva.
    • Deve essere entro il periodo di validità per ogni ora UTC corrente al momento della convalida del pacchetto in nuget.org.
    • Deve essere concatenato a un'autorità radice attendibile considerata attendibile per impostazione predefinita in Windows. I pacchetti firmati con certificati autocertificati vengono rifiutati.
    • Deve essere valido allo scopo:
      • Il certificato di firma dell'autore deve essere valido per la firma del codice.
      • Il certificato timestamp deve essere valido per il timestamp.
    • Non deve essere revocato al momento della firma. (Questo potrebbe non essere noto al momento dell'invio, quindi nuget.org controlla periodicamente lo stato di revoca).