Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un nome forte è costituito dall'identità dell'assembly—ovvero il nome di testo semplice, il numero di versione e le informazioni cultura (se specificato)—oltre a una chiave pubblica e a una firma digitale. Viene generato da un file di assembly usando la chiave privata corrispondente. Il file di assembly contiene il manifesto dell'assembly, che contiene i nomi e gli hash di tutti i file che costituiscono l'assembly.
Avvertimento
Non fare affidamento su nomi sicuri per la sicurezza. Forniscono solo un'identità univoca.
Un assembly con nome sicuro può usare solo tipi di altri assembly con nome sicuro. Altrimenti, l'integrità dell'assembly con nome forte verrebbe compromessa.
Annotazioni
Anche se .NET Core supporta assembly con nome sicuro e tutti gli assembly nella libreria .NET Core sono firmati, la maggior parte degli assembly di terze parti non richiede nomi sicuri. Per altre informazioni, vedere Firma con nome sicuro in GitHub.
Scenario con nome sicuro
Nello scenario seguente viene illustrato il processo di firma di un assembly con un nome forte e il successivo riferimento a esso tramite tale nome.
L'assembly A viene creato con un nome sicuro usando uno dei metodi seguenti:
Uso di un ambiente di sviluppo che supporta la creazione di nomi sicuri, ad esempio Visual Studio.
Creazione di una coppia di chiavi crittografiche usando lo strumento Nome sicuro (Sn.exe) e assegnando tale coppia di chiavi all'assembly usando un compilatore della riga di comando o assembly Linker (Al.exe). Windows SDK fornisce sia Sn.exe che Al.exe.
L'ambiente di sviluppo o lo strumento firma l'hash del file contenente il manifesto dell'assembly con la chiave privata dello sviluppatore. Questa firma digitale viene archiviata nel file PE (Portable Executable) che contiene il manifesto dell'assembly A.
Assembly B è un consumer dell'Assembly A. La sezione di riferimento del manifesto dell'Assembly B include un token che rappresenta la chiave pubblica dell'Assembly A. Un token è una parte della chiave pubblica completa e viene usata anziché la chiave stessa per risparmiare spazio.
Il Common Language Runtime verifica la firma con nome sicuro quando l'assembly viene inserito nella Global Assembly Cache. Quando si esegue l'associazione per nome sicuro in fase di esecuzione, Common Language Runtime confronta la chiave archiviata nel manifesto dell'assembly B con la chiave usata per generare il nome sicuro per Assembly A. Se i controlli di sicurezza .NET vengono superati e l'associazione ha esito positivo, Assembly B garantisce che i bit dell'assembly A non siano stati manomessi e che questi bit provengano effettivamente dagli sviluppatori dell'assembly A.
Annotazioni
Questo scenario non risolve i problemi di attendibilità. Gli assembly possono contenere firme complete di Microsoft Authenticode oltre a un nome sicuro. Le firme Authenticode includono un certificato che stabilisce un'attendibilità. È importante notare che i nomi sicuri non richiedono che il codice venga firmato in questo modo. I nomi sicuri forniscono solo un'identità univoca.
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 dell'applicazione con attendibilità completa, ad esempio il dominio applicazione predefinito per la MyComputer zona. Questa operazione viene definita funzionalità di bypass con nome sicuro. In un ambiente con attendibilità totale, le richieste per StrongNameIdentityPermission hanno sempre successo per gli assembly firmati con attendibilità totale, indipendentemente dalla loro firma. La funzionalità di bypass del nome sicuro evita il sovraccarico non necessario della verifica della firma con nome sicuro degli assembly con attendibilità completa in questa situazione, consentendo agli assembly di caricarsi più velocemente.
La funzionalità di bypass si applica a qualsiasi assembly firmato con un nome sicuro e con le caratteristiche seguenti:
Completamente attendibile senza StrongName riscontri (ad esempio, ha indicazioni di zona
MyComputer).Caricato in un oggetto completamente attendibile AppDomain.
Caricato da una posizione nella ApplicationBase proprietà di tale AppDomainoggetto .
Non con segno ritardato.
Questa funzionalità può essere disabilitata per singole applicazioni o per un computer. Vedere Procedura: Disabilitare la funzionalità di bypass con nome sicuro.
Argomenti correlati
| Titolo | Description |
|---|---|
| Procedura: Creare una coppia di chiavi pubblica-privata | Viene descritto come creare una coppia di chiavi crittografiche per la firma di un assembly. |
| Procedura: Firmare un assembly con un nome sicuro | Il testo descrive come creare un assembly con nome sicuro. |
| Denominazione forte migliorata | Descrive i miglioramenti apportati ai nomi sicuri in .NET Framework 4.5. |
| Procedura: Fare riferimento a un assembly con nome sicuro | Descrive come fare riferimento a tipi o risorse in un assembly con nome forte nella fase di compilazione o a runtime. |
| Procedura: Disabilitare la funzionalità di bypass con 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. |
| Creare assembly | Viene fornita una panoramica degli assembly a file singolo e multifile. |
| Come ritardare la firma di un assembly in Visual Studio | Viene illustrato come firmare un assembly con un nome sicuro dopo la creazione dell'assembly. |
| Sn.exe (strumento Nome sicuro) | Descrive lo strumento incluso in .NET Framework che consente di creare assembly con nomi sicuri. Questo strumento offre opzioni per la gestione delle chiavi, la generazione della firma e la verifica della firma. |
| Al.exe (Assembly linker) | Descrive lo strumento incluso in .NET Framework che genera un file con un manifesto dell'assembly da moduli o file di risorse. |