Condividi tramite


Firma con nome sicuro per applicazioni gestite

La firma con nome sicuro fornisce un'identità univoca globale a un componente software, che consente di proteggere il componente da eventuali attacchi di spoofing da parte di utenti non autorizzati. I nomi sicuri vengono utilizzati per garantire che le dipendenze del componente e le istruzioni di configurazione vengano mappate esattamente al componente e alla versione 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, nonché da un token di chiave pubblica e da una firma digitale.

Per i progetti di Visual C# e Visual Basic, Visual Studio consente l'utilizzo di nomi sicuri tramite il riquadro Firma in Progettazione progetti. Vedere Pagina Firma, Progettazione progetti.

Per i progetti di Visual C++, utilizzare le opzioni del linker per firmare l'assembly. Vedere Assembly con nome sicuro (firma degli assembly) (C++/CLI).

Motivi per cui utilizzare nomi sicuri

Il nome sicuro fornisce un'identità univoca a un'applicazione o a un componente, che può essere utilizzata da un'altra funzionalità software per fare riferimento esplicitamente all'applicazione o al componente. Ad esempio, i nomi sicuri consentono agli autori delle applicazioni e agli amministratori di indicare una specifica versione di manutenzione da utilizzare per un componente condiviso. In questo modo, è possibile specificare versioni differenti per applicazioni differenti, senza alcun impatto sulle altre applicazioni. Il nome sicuro di un componente può inoltre essere utilizzato come evidenza di sicurezza per stabilire una relazione di trust tra due componenti.

Elementi a cui è possibile assegnare nomi sicuri

È possibile assegnare un nome sicuro agli assembly .NET Framework e ai manifesti XML, tra cui:

  • Assembly dell'applicazione (exe)

  • Manifesti dell'applicazione (exe.manifest)

  • Manifesti di distribuzione (application)

  • Assembly di componenti condivisi (dll)

Elementi a cui è consigliabile assegnare nomi sicuri

Si consiglia di assegnare un nome sicuro alle DLL condivise. Indipendentemente dal fatto che una DLL venga distribuita nella Global Assembly Cache, si consiglia di utilizzare un nome sicuro quando la DLL non è un dettaglio privato di implementazione dell'applicazione, ma rappresenta un servizio generale che può essere utilizzato da più applicazioni.

Elementi a cui è necessario assegnare nomi sicuri

Il nome sicuro deve essere sempre utilizzato per i seguenti componenti:

  • DLL, se si desidera distribuire questi file nella Global Assembly Cache (GAC).

  • Applicazione ClickOnce e manifesti di distribuzione. Nel sistema del progetto di Visual Studio questa impostazione è attivata automaticamente per le applicazioni distribuite mediante ClickOnce.

  • Assembly di interoperabilità primari, che vengono utilizzati per l'interoperabilità COM. L'utilità TLBIMP impone l'attivazione dei nomi sicuri durante la creazione di un assembly di interoperabilità primario da una libreria dei tipi COM.

Elementi a cui non è consigliabile assegnare nomi sicuri

In linea generale, si consiglia di non utilizzare i nomi sicuri sugli assembly EXE dell'applicazione. Un'applicazione o un componente con nome sicuro non può fare riferimento a un componente con nome non sicuro. Di conseguenza, l'utilizzo di un nome sicuro per un file EXE impedisce a quest'ultimo di fare riferimento alle DLL con nome non sicuro distribuite con l'applicazione.

Per questo motivo, nel sistema del progetto di Visual Studio i nomi sicuri non vengono utilizzati sui file EXE dell'applicazione ma sul manifesto dell'applicazione che fa riferimento internamente al file EXE dell'applicazione con nome non sicuro.

Si consiglia inoltre di evitare l'utilizzo dei nomi sicuri sui componenti privati dell'applicazione. In questo caso, l'utilizzo dei nomi sicuri può rendere più difficile la gestione delle dipendenze e aggiungere un inutile sovraccarico per i componenti privati.

Come assegnare un nome sicuro

In Visual Studio, assegnare un nome sicuro a un'applicazione o a un componente mediante il riquadro Firma di Progettazione progetti. Nel riquadro Firma, sono supportati due metodi di utilizzo dei nomi sicuri: tramite un file di chiave con nome sicuro o tramite un provider di chiavi. Per informazioni sulla firma dei manifesti, vedere Procedura: firmare manifesti dell'applicazione e di distribuzione. Per informazioni sulla creazione dei file di chiave con nome sicuro (SNK), vedere Procedura: creare una coppia di chiavi pubblica/privata.

Quando si sceglie il metodo basato sul file di chiave, è possibile utilizzare un file di chiave esistente o crearne uno nuovo. Per impedire che il file di chiave venga utilizzato da utenti non autorizzati, si consiglia di proteggerlo sempre con una password.

In alternativa, per proteggere le chiavi con nome sicuro è possibile utilizzare i provider di chiavi o gli archivi certificati. Alcuni provider di chiavi prevedono l'utilizzo di una smart card per verificare l'identità dell'utente e impedire il furto della chiave.

Aggiornamento dei componenti con nome sicuro

Non è possibile eseguire la manutenzione o l'aggiornamento di un componente con nome sicuro copiando una nuova versione su quella precedente.

Per aggiornare una DLL con nome non sicuro è sufficiente copiare una nuova versione nella directory dell'applicazione. In Common Language Runtime (CLR) verrà infatti caricata la versione della DLL fisicamente presente.

Nel caso delle DLL con nome sicuro è necessario ricompilare l'intera applicazione in modo che tutti i riferimenti dell'assembly puntino alla nuova versione. In alternativa, è possibile aggiornare il file config dell'applicazione in modo che venga caricata la nuova versione anziché quella precedente.

Sebbene i componenti con nome sicuro richiedano una maggiore attività di manutenzione, l'utilizzo dei nomi sicuri consente alle applicazioni di indicare esplicitamente le versioni degli altri componenti a cui dovranno accedere in fase di esecuzione.

Vedere anche

Attività

Procedura: firmare manifesti dell'applicazione e di distribuzione

Procedura: firmare un assembly (Visual Studio)

Procedura: ritardare la firma di un assembly (Visual Studio)

Riferimenti

Pagina Firma, Progettazione progetti

Concetti

Protezione di applicazioni ClickOnce

Assembly con nomi sicuri

Assembly con nome sicuro (firma degli assembly) (C++/CLI)

Altre risorse

Gestione delle firme di assembly e manifesti