Sospendendo un attimo la CAS, affrontiamo insieme il discorso dello strong name e dalla GAC.
Io ho un nome ed un cognome così anche i nostri assembly, anzi loro hanno molte più informazioni oltre il nome hanno:
- la versione
- la cultura
- public key
- digital signature
Tutto questo torna utile anche dal punto della sicurezza e capiremo dopo il perchè. Prima di tutto come gli diamo la public key e la digital signature? Semplice a dirsi sn.exe (strong name tool). Ed a farsi?
Ma ancor prima dove si trova:
C:\Programmi\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin
Passaggi:
- generiamo l'snk: dal prompt dei comandi di VS.Net 2003 per creare un file .snk dobbiamo di nome "chiavi.snk"
scrivere sn -k chiavi.snk
viene generato e salvato nella directory corrente
- associamolo alla nostra .dll: questo lo facciamo nell'Assembly.Info
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile(@"..\..\chiave.snk")]
- verifichiamo che abbiamo fatto bene:
scrivere sn -v "C:\IlPercorso\Esempio.dll"
Se ci restituisce una cosa del genere utilità nome sicuro di Microsoft vuol dire che abbiamo fatto bene, altrimenti :)
Ora ditemi voi una volta che ho assegnato tutte queste cose è più difficile utilizzare in modo improprio o "impersonare" il nostro assembly? Direi proprio di sì.
I parametri del tool sn sono tutti qui
Vediamo ora qualcosa sulla GAC (Global Assembly Cache)...
Nel bene e nel male una delle cose che a seconda dei casi può essere considerata un beno o un male è l'AVANTI AVANTI ossia wizard etc. Certo automatizzare l'installazione delle nostre soluzioni è una gran bella comodità delle applicazioni create col .NET framework ma se il nostro scopo è quello di lavorare in sicurezza? Meglio utilizzare la GAC che sta lì proprio per questo. Se installiamo un assembly in esso più applicazioni possono utilizzarlo. Immaginiamo domani di fare una release di update? E' più comodo modificare UNA cosa in UN posto SOLO che cambiare lo stesso assembly in tutte le cartelle. Bello, bellissimo ma vediamo come si procede.
Allora i metodi sono:
- automaticamente :
- windows installer
- chiamando direttamente le APIs
- da linea di comando utilizzando un batch file ed la GacUtil
- manualmente:
- col .Net Framework Configuration tool
- da linea di comando
- windows explorer
Windows Explorer
Vista l'ora vediamo prima come si fa con la windows explorer: basta aprire una cartella o windows explorer e nella barra dell'indirizzo %windir%\assembly e grazie a SHFusion.dll vediamo tutti i nostri assembly che risiedono nella GAC.. ed ora? Un bel copia ed incolla del nostro assembly :)
Complichiamo un pò le cose ed utilizziamo il Configuration tool
Configuration Tool
E' lo stesso di cui parlavo ieri dunque ricordiamo Start-Pannello di Controllo- Strumenti d'amministrazione - .Net Configuration1.1
tasto destro su Cache Assembly ed aggiungiamo il nostro assembly
Per gli altri magari domani... continuo a studiare ma non penso di riuscire a postare prima delle 24.. dunque a domani :)
Ps. Maggiori informazioni sull'esame 70-340: Implementing Security for Applications with Microsoft Visual C# .NET qui