Considerazioni sulla protezione degli assembly

Aggiornamento: novembre 2007

  • Quando si crea un assembly, è possibile specificare l'insieme di autorizzazioni che verranno richieste per consentirne l'esecuzione. Se sussistano o meno le autorizzazioni per l'utilizzo di un assembly lo si evince dalle prove.

Le prove vengono utilizzate in due modi diversi:

  • La prova di input viene unita alla prova acquisita durante il caricamento per creare un set di prove finale utilizzato per la risoluzione dei criteri. I metodi in cui viene utilizzata tale semantica sono Assembly.Load, Assembly.LoadFrom e Activator.CreateInstance.

  • La prova di input viene utilizzata non modificata come set di prove finale per la risoluzione dei criteri. I metodi in cui viene utilizzata tale semantica sono Assembly.Load(byte[]) e AppDomain.DefineDynamicAssembly().

Autorizzazioni opzionali potranno essere concesse dai criteri di protezione impostati sul computer che eseguirà l'assembly. Se si desidera che il proprio codice gestisca tutte le possibili eccezioni di protezione, si può procedere in uno dei modi seguenti:

  • Inserire una richiesta per tutte le autorizzazioni di cui il codice deve disporre e gestire gli errori che si verificheranno in fase di caricamento nel caso in cui le autorizzazioni non venissero riconosciute.

  • Non prevedere una richiesta per le autorizzazioni eventualmente necessarie, ma limitarsi a predisporre la gestione delle eccezioni di protezione che si verificheranno in mancanza di tali autorizzazioni.

    Nota:

    Quello della protezione è un tema complesso in cui è possibile scegliere tra molte possibili opzioni. Per ulteriori informazioni, vedere Concetti principali sulla protezione.

In fase di caricamento, l'evidenza dell'assembly viene utilizzata come input per i criteri di protezione. I criteri di protezione vengono stabiliti dall'azienda e dall'amministratore dei computer, così come dalle impostazioni adottate dallo stesso utente, e determinano l'insieme di autorizzazioni concesse a tutto il codice gestito che viene eseguito sul computer. È possibile stabilire criteri di protezione basati sull'autore dell'assembly (se questo dispone di una firma generata da uno strumento firma digitale), sul sito Web e la zona (come è definita in Internet Explorer) da cui è stato effettuato il download dell'assembly o sul nome sicuro dell'assembly. L'amministratore di un computer può ad esempio stabilire criteri di protezione che consentono a tutto il codice scaricato da un sito Web e firmato da una determinata azienda di software di accedere al database presente su un computer, ma non di scrivere sul disco rigido.

Assembly con nomi sicuri e strumenti firma digitale

È possibile firmare un assembly in due modi diversi ma complementari: con un nome sicuro o utilizzando Strumento firma digitale (Signcode.exe) in .NET Framework versione 1.0 e 1.1 oppure Strumento per la firma (SignTool.exe) nelle versioni successive di .NET Framework. La firma di un assembly con un nome sicuro comporta l'aggiunta di una crittografia con chiave pubblica al file che contiene il manifesto dell'assembly. La firma con nome sicuro garantisce l'univocità del nome, ne impedisce l'utilizzo fraudolento e fornisce un'identità al chiamante quando un riferimento viene risolto.

I nomi sicuri non garantiscono tuttavia alcun livello di attendibilità. A ciò provvedono infatti Strumento firma digitale (Signcode.exe) e Strumento per la firma (SignTool.exe). I due strumenti firma digitale impongono all'autore di provare la propria identità a un'autorità terza per ottenere un certificato. Il certificato viene poi incorporato nel file e può essere utilizzato da un amministratore per decidere se considerare attendibile l'autenticità del codice.

È possibile associare a un assembly il solo nome sicuro, la sola firma digitale creata mediante Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe) o entrambi. Con i due strumenti firma digitale è possibile firmare un solo file alla volta. Nel caso di assembly su più file, si firmerà solo il file che contiene il manifesto dell'assembly. Il nome sicuro viene memorizzato nel file che contiene il manifesto dell'assembly, mentre la firma creata mediante Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe) viene memorizzata in un'area riservata del file eseguibile portabile (PE, Portable Executable) che contiene il manifesto dell'assembly. La firma di un assembly realizzata mediante Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe) può essere adottata (con o senza un nome sicuro) quando già si dispone di una gerarchia attendibile basata su firme generate Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe) o quando i propri criteri si avvalgono solo della chiave e non controllano la catena di attendibilità.

Nota:

Quando a un assembly si assegna sia un nome sicuro che una firma digitale, il nome sicuro deve essere assegnato per primo.

Common Language Runtime esegue anche una verifica hash. Il manifesto dell'assembly contiene infatti un elenco di tutti i file che compongono l'assembly, comprensivo dell'hash generato per ciascun file al momento della creazione del manifesto. Quando si carica un file, l'hash del relativo contenuto viene generato e confrontato al valore di hash archiviato nel manifesto. Se i due hash non corrispondono, l'assembly non viene caricato.

Poiché nomi sicuri e firme create mediante Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe) garantiscono l'integrità, è possibile basare i criteri di protezione per l'accesso al codice su queste due prove degli assembly. I nomi sicuri e le firme create mediante Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe) garantiscono l'integrità tramite firme digitali e certificati. Tutte le tecnologie menzionate (verifica hash, denominazioni sicure e firme create mediante Strumento firma digitale (Signcode.exe) o Strumento per la firma (SignTool.exe)) contribuiscono a garantire che l'assembly non sia stato alterato in alcun modo.

Vedere anche

Concetti

Assembly con nomi sicuri

Riferimenti

Strumento per la firma (SignTool.exe)

Strumento firma digitale (Signcode.exe)

Altre risorse

Assembly in Common Language Runtime