Creazione e utilizzo degli assembly con nome sicuro
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 eventualmente disponibili, nonché da una chiave pubblica e da una firma digitale. Tale nome viene generato da un file assembly tramite la chiave privata corrispondente. Nel file assembly è contenuto il manifesto dell'assembly, in cui si trovano i nomi e gli hash di tutti i file che costituiscono l'assembly.
Un assembly con nome sicuro può utilizzare solo tipi di altri assembly con nome sicuro. In caso contrario, la sicurezza dell'assembly con nome sicuro risulterebbe compromessa.
In questa panoramica sono incluse le sezioni seguenti:
Scenario relativo al nome sicuro
Come ignorare la verifica della firma degli assembly attendibili
Argomenti correlati
Scenario relativo al nome sicuro
Nello scenario seguente viene illustrato il processo di firma di un assembly con un nome sicuro e la successiva creazione di riferimenti basati su tale nome.
Un assembly A viene creato con un nome sicuro mediante uno dei metodi seguenti:
Utilizzo di un ambiente di sviluppo in cui è supportata la creazione di nomi sicuri, quale Visual Studio 2005.
Creazione di una coppia di chiavi di crittografia utilizzando lo strumento Nome sicuro (Sn.exe) e assegnazione di tale coppia all'assembly tramite un compilatore da riga di comando o Assembly Linker (Al.exe). In Windows Software Development Kit (SDK) sono inclusi sia Sn.exe che Al.exe.
L'hash del file contenente il manifesto dell'assembly viene firmato dall'ambiente o dallo strumento di sviluppo con la chiave privata dello sviluppatore. Tale firma digitale viene memorizzata nel file eseguibile portabile (PE, Portable Executable) contenente il manifesto dell'assembly A.
L'assembly B è un consumer dell'assembly A. Nella sezione dei riferimenti del manifesto dell'assembly B è incluso un token che rappresenta la chiave pubblica dell'assembly A. Un token è una parte della chiave pubblica completa e viene utilizzato al posto della chiave stessa in modo da occupare meno spazio.
Quando l'assembly viene inserito nella Global Assembly Cache, la firma con nome sicuro viene verificata da Common Language Runtime. Quando si effettua l'associazione tramite nome sicuro in fase di esecuzione, Common Language Runtime confronta la chiave archiviata nel manifesto dell'assembly B con la chiave utilizzata per generare il nome sicuro per l'assembly A. Se i controlli di sicurezza di .NET Framework hanno esito positivo e l'associazione riesce, nell'utilizzare l'assembly B si può dare per certo che le informazioni contenute nell'assembly A non siano state alterate e provengano effettivamente dal relativo sviluppatore.
Nota |
---|
In questo scenario non vengono affrontate le problematiche relative all'attendibilità.Oltre a un nome sicuro, agli assembly è possibile assegnare firme Microsoft Authenticode complete,che includono un certificato che consente di stabilire l'attendibilità.È importante sottolineare che tale firma del codice non viene richiesta dai nomi sicuri.Non è infatti necessario che le chiavi utilizzate per generare la firma con nome sicuro corrispondano alle chiavi utilizzate per generare una firma Authenticode. |
Torna all'inizio
Come ignorare la verifica della firma degli assembly attendibili
A partire da .NET Framework 3.5 Service Pack 1, le firme con nome sicuro non vengono convalidate quando un assembly viene caricato in un dominio applicazione con attendibilità totale, ad esempio il dominio applicazione predefinito per la zona MyComputer. Questa novità viene definita funzionalità che consente di ignorare il nome sicuro. In un ambiente totalmente attendibile, le richieste di StrongNameIdentityPermission hanno sempre esito positivo per gli assembly firmati con attendibilità totale, indipendentemente dalla firma. La funzionalità che consente di ignorare il nome sicuro evita l'inutile sovraccarico della verifica delle firme con nome sicuro degli assembly con attendibilità totale in questa situazione, velocizzando il caricamento degli assembly.
Questa funzionalità si applica a tutti gli assembly firmati con nome sicuro che abbiano le caratteristiche seguenti:
Sono completamente attendibili senza l'evidenza StrongName (ad esempio, dispongono dell'evidenza della zona MyComputer).
Vengono caricati in un oggetto AppDomain completamente attendibile.
Vengono caricati da un percorso nella proprietà ApplicationBase di tale oggetto AppDomain.
Non hanno firma ritardata.
Questa funzionalità può essere disabilitata per le singole applicazioni o per un computer. Vedere Procedura: disabilitare la funzionalità che consente di ignorare il nome sicuro.
Torna all'inizio
Argomenti correlati
Titolo |
Descrizione |
---|---|
Viene descritta la creazione di una coppia di chiavi crittografiche per la firma di un assembly. |
|
Viene descritta la modalità di creazione di un assembly con nome sicuro. |
|
Procedura: aggiungere un riferimento a un assembly con nome sicuro |
Viene descritto come fare riferimento a tipi o risorse in un assembly con nome sicuro in fase di compilazione o di esecuzione. |
Procedura: disabilitare la funzionalità che consente di ignorare il nome sicuro |
Viene descritto come disabilitare la funzionalità che ignora la convalida delle firme con nome sicuro. Questa funzionalità può essere disabilitata per tutte le applicazioni o per applicazioni specifiche. |
Viene fornita una panoramica degli assembly su singolo file o su più file. |
|
Procedura: ritardare la firma di un assembly (Visual Studio) |
Illustra la procedura per la firma di un assembly con un nome sicuro dopo che l'assembly è stato creato. |
Viene descritto lo strumento incluso in .NET Framework che consente di creare assembly con nomi sicuri. In questo strumento sono disponibili opzioni per la gestione delle chiavi nonché per la generazione e la verifica delle firme. |
|
Viene descritto lo strumento incluso in .NET Framework che genera un file con un manifesto dell'assembly da moduli o file di risorse. |
Torna all'inizio