Gestione delle firme di assembly e manifestiManage assembly and manifest signing

La firma con nome sicuro offre un'identità univoca globale per un componente software.Strong-name signing gives a software component a globally unique identity. 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.Strong names are used to guarantee that the assembly cannot be spoofed by someone else, and to make sure that component dependencies and configuration statements map to the correct component and component version.

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.A strong name consists of the assembly's identity (simple text name, version number, and culture information), plus a public key token and a digital signature.

Per informazioni sulla firma degli assembly nei progetti Visual Basic e C#, vedere Creare e usare gli assembly con nome sicuro.For information about signing assemblies in Visual Basic and C# projects, see Create and use strong-named assemblies.

Per informazioni sulla firma degli assembly nei progetti Visual C++, vedere Assembly con nome sicuro (C++/CLI).For information about signing assemblies in Visual C++ projects, see Strong-named assemblies (C++/CLI).

Note

La firma con nome sicuro non offre protezione da attacchi di reverse engineering dell'assembly.Strong-name signing does not protect against reverse-engineering of the assembly. Per la protezione da attacchi di reverse engineering, vedere Dotfuscator Community.To protect against reverse-engineering, see Dotfuscator Community.

Tipi di asset e firmaAsset types and signing

È possibile firmare gli assembly .NET e i manifesti dell'applicazione:You can sign .NET assemblies and application manifests:

  • File eseguibili ( .exe)Executables (.exe)

  • Manifesti dell'applicazione ( .exe.manifest)Application manifests (.exe.manifest)

  • Manifesti della distribuzione ( .application)Deployment manifests (.application)

  • Assembly di componenti condivisi ( .dll)Shared component assemblies (.dll)

Firmare i seguenti tipi di asset:Sign the following types of asset:

  1. Assembly, se si vuole distribuirli alla Global Assembly Cache (GAC).Assemblies, if you want to deploy them to the global assembly cache (GAC).

  2. Manifesti della distribuzione e dell'applicazione ClickOnce.ClickOnce application and deployment manifests. Visual Studio abilita la firma per impostazione predefinita per queste applicazioni.Visual Studio enables signing by default for these applications.

  3. Assembly di interoperabilità primari, usati per l'interoperabilità COM.Primary interop assemblies, which are used for COM interoperability. L'utilità TLBIMP attiva l'assegnazione di nomi sicuri quando crea un assembly di interoperabilità primario da una libreria di tipi COM.The TLBIMP utility enforces strong-naming when creating a primary interop assembly from a COM type library.

In generale è consigliabile non firmare i file eseguibili.In general, you should not sign executables. Un componente con nome sicuro non può fare riferimento a un componente privo di nome sicuro distribuito con l'applicazione.A strongly named component cannot reference a non-strongly-named component that is deployed with the application. 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.Visual Studio does not sign application executables, but instead signs the application manifest, which points to the weak-named executable. Evitare di firmare i componenti privati dell'applicazione, perché la firma può rendere più difficile la gestione delle dipendenze.Avoid signing components that are private to your application, because signing can make it more difficult to manage dependencies.

Come firmare un assembly in Visual StudioHow to sign an assembly in Visual Studio

Per firmare un'applicazione o un componente, usare 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à).You sign an application or component by using the Signing tab of the project properties window (right-click the project node in Solution Explorer and select Properties). Selezionare la scheda Firma, quindi la casella di controllo Firma assembly.Select the Signing tab, then select the Sign the assembly check box.

Specificare un file di chiave.Specify a key file. Se si sceglie di creare un nuovo file di chiave, i nuovi file di chiave vengono sempre creati in formato .pfx.If you choose to create a new key file, new key files are always created in the .pfx format. Sono necessari un nome e una password per il nuovo file.You need a name and password for the new file.

Warning

Proteggere sempre il file di chiave con una password per impedire ad altri di usarlo.You should always protect your key file with a password to prevent someone else from using it. È possibile proteggere le chiavi usando provider o archivi certificati.You can also secure your keys by using providers or certificate stores.

È anche possibile fare riferimento a una chiave già creata.You can also point to a key you have already created. Per altre informazioni sulla creazione delle chiavi, vedere Creare una coppia di chiavi pubblica/privata.For more information about creating keys, see Create a public-private key pair.

Se si ha accesso solo a una chiave pubblica, è possibile usare il ritardo della firma per rinviare l'assegnazione della chiave.If you only have access to a public key, you can use delay-signing to defer assigning the key. Per abilitare il ritardo della firma selezionare la casella di controllo Ritarda firma.You enable delay signing by selecting the Delay sign only check box. Un progetto con firma ritardata non viene eseguito e non è possibile eseguirne il debug.A delay-signed project doesn't run, and you can't debug it. Tuttavia, è possibile ignorare la verifica durante lo sviluppo usando lo strumento nome sicuro Sn.exe con l'opzione -Vr.However, you can skip verification during development by using the Sn.exe strong name tool with the -Vr option.

Per informazioni sulla firma dei manifesti, vedere Procedura: Firmare manifesti dell'applicazione e di distribuzione.For information about signing manifests, see How to: Sign application and deployment manifests.

Vedere ancheSee also