Gestire le firme di assembly e manifesti

La firma con nome sicuro offre un'identità univoca globale per un componente software. I nomi sicuri sono usati per garantire che l'assembly non possa essere sottoposto a spoofing da parte di altri utenti e per verificare che le dipendenze dei componenti e le istruzioni di configurazione siano mappate al componente e alla versione del componente corretti.

Un nome sicuro è costituito dall'identità dell'assembly, corrispondente al nome semplice in formato testo, al numero di versione e alle informazioni sulle impostazioni cultura, più un token di chiave pubblica e una firma digitale.

Per informazioni sulla firma degli assembly nei progetti Visual Basic e C#, vedere Creare e usare gli assembly con nome sicuro.

Per informazioni sulla firma di assembly nei progetti C++, vedere Assembly con nome sicuro (C++/CLI).

Nota

La firma con nome sicuro non offre protezione da attacchi di reverse engineering dell'assembly. Per la protezione da attacchi di reverse engineering, vedere Dotfuscator Community.

Tipi di asset e firma

È possibile firmare gli assembly .NET e i manifesti dell'applicazione:

  • File eseguibili (.exe)

  • Manifesti dell'applicazione (.exe.manifest)

  • Manifesti della distribuzione (.application)

  • Assembly di componenti condivisi (.dll)

Firmare i seguenti tipi di asset:

  1. Assembly, se si vuole distribuirli alla Global Assembly Cache (GAC).

  2. Manifesti della distribuzione e dell'applicazione ClickOnce. Visual Studio abilita la firma per impostazione predefinita per queste applicazioni.

  3. Assembly di interoperabilità primari, usati per l'interoperabilità COM. L'utilità TLBIMP attiva l'assegnazione di nomi sicuri quando crea un assembly di interoperabilità primario da una libreria di tipi COM.

In generale è consigliabile non firmare i file eseguibili. Un componente con nome sicuro non può fare riferimento a un componente privo di nome sicuro distribuito con l'applicazione. Visual Studio non firma gli eseguibili dell'applicazione, consente invece di firmare il manifesto dell'applicazione, che fa riferimento al file eseguibile con nome debole. Evitare di firmare i componenti privati dell'applicazione, perché la firma può rendere più difficile la gestione delle dipendenze.

Come firmare un assembly in Visual Studio

La procedura per firmare un assembly dipende dalla versione utilizzata dal progetto di Progettazione progetti.

Per i progetti C# .NET Core (e .NET 5 e versioni successive) in Visual Studio 2022:

  1. Aprire la finestra delle proprietà del progetto (fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliere Proprietà).
  2. In Compila cercare Denominazione complessa e selezionare la casella di controllo Firma assembly . Quando si seleziona la casella, vengono visualizzate opzioni aggiuntive per il file di chiave e la firma ritardata.
  3. Specificare un file di chiave. Se si sceglie di creare un nuovo file di chiave, i nuovi file di chiave vengono sempre creati in formato .pfx. Sono necessari un nome e una password per il nuovo file.

Per i progetti .NET Framework e Visual Basic in Visual Studio 2022 o in Visual Studio 2019:

  1. Aprire la scheda Firma della finestra delle proprietà del progetto (fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliere Proprietà). Seleziona la scheda Firma.
  2. Selezionare la casella di controllo Firma assembly .
  3. Specificare un file di chiave. Se si sceglie di creare un nuovo file di chiave, i nuovi file di chiave vengono sempre creati in formato .pfx. Sono necessari un nome e una password per il nuovo file.

Avviso

Proteggere sempre il file di chiave con una password per impedire ad altri di usarlo. È possibile proteggere le chiavi usando provider o archivi certificati.

È anche possibile fare riferimento a una chiave già creata. Per altre informazioni sulla creazione delle chiavi, vedere Creare una coppia di chiavi pubblica/privata.

Se si ha accesso solo a una chiave pubblica, è possibile usare il ritardo della firma per rinviare l'assegnazione della chiave. Per abilitare il ritardo della firma selezionare la casella di controllo Ritarda firma. Un progetto con firma ritardata non viene eseguito e non è possibile eseguirne il debug. Tuttavia, è possibile ignorare la verifica durante lo sviluppo usando lo strumento nome sicuro Sn.exe con l'opzione -Vr.

Per informazioni sulla firma dei manifesti, vedere Procedura: Firmare manifesti dell'applicazione e di distribuzione.