MokaByte
Numero 35 - Novembre 99
|
||||
|
|
|
||
|
|
all'utilizzo della firma digitale |
||
Lo scorso mese abbiamo visto come con l’utilizzo delle firme digitali è possibile garantire l’integrità e la sicurezza delle informazioni che viaggiano attraverso la rete. In questo articolo vedremo come, attraverso lo stesso meccanismo, è possibile abilitare in modo controllato l’accesso di applets alle risorse di una macchina client, estendendo così le potenzialità di una applicazione web. ll nostro punto di vista sarà ovviamente la piattaforma Java 2 con qualche reminiscenza della JDK 1.1 nel presentare le attività da svolgere per rendere operativo tale meccanismo anche sulla precedente versione della piattaforma Java.
|
Introduzione
InIl Problema Supponiamo
di voler sviluppare un applet di nome myapplet che scriva un messaggio
in un file la cui path gli è passata come parametro. Per fare
questo, inseriamo all’interno del metodo init() le seguenti istruzioni
:
...Per default, tale applet non può accedere alle risorse di un sistema al di fuori della directory da cui è stato scaricato, pertanto non appena andremo ad eseguirlo con un browser java-enabled (Netscape Comunicator, Internet Explorer o altri) avremo una Security Exception. Di contro, è possibile estendere le autorizzazioni di sicurezza di un applet rendendolo signed (firmato). In questo modo, quest’ultimo potrà accedere alle risorse di una macchina client con le autorizzazioni che gli verranno assegnate da un sistema di Security Policy. Il JDK 1.2 mette a disposizione dei tools di security che consentono agli utenti finali e/o amministratori di firmare applet (ma anche applicazioni) e di definire la Security Policy relativa a tale applet e/o applicazione specificando le permission in un apposito Policy file. Come rendere un applet “signed” Pre-requisito per poter firmare e quindi manipolare signed applet è quello di inserire questi ultimi all’interno di Java ARchive (JAR). Quindi, all’interno della pagine HTML che dovrà contenere (ad esempio) myapplet inseriremo un applet tag del tipo : <applet
code=”myapplet.class”
Esaminiamo
ora le attività da svolgere per firmare un applet e fare in modo
che questo funzioni correttamente sulla macchina client, il che significa
mettere quest’ultima nelle condizioni di verificare chi è il “firmatario”
dell’applet che ha scaricato e in base a questo assegnare le dovute autorizzazioni
per l’accesso alle risorse della macchina [1].
javac myapplet.java jar -cvf myapplet.jar myapplet.class *.gif Ricordiamo che
il Java ARchive è un formato compresso[2] che consente di scaricare
i un’unica sessione dal server le classi necessarie per far funzionare
l’applet e le risorse che quest’ultimo utilizza (es. immagini, suoni, ecc.).
In questo caso il tool jar viene utilizzato con le opzioni -cvf che significano
: creazione di un nuovo archivio, modalità verbose e inserimento
del nome dell’archivio da creare.
A questo punto, è necessario generare due chiavi asimmetriche che utilizzeremo rispettivamente per firmare l’applet (privata) e per consentire alla macchina client di verificare la firma digitale (pubblica)[1]. Quest’ultima sarà distribuita attraverso un certificato reso disponibile a tutti gli utilizzatori finali dell’applet. Il comando per effettuare questa operazione è il seguente : keytool -genkey -alias signapplet -keystore mystore -keypass kpi135 -dname “cn=cnapplet” -storepass abcd00 Con il tool keytool,
ed in particolare con l’opzione -genkey viene generata una coppia di chiavi
identificata attraverso l’alias signapplet. Tale alias, sarà utilizzato
insieme alla password kpi135 specificata con l’opzione -keypass per poter
accedere alla chiave privata in successive invocazioni dei tools di security.
La coppia di chiavi generata viene quindi memorizzata in un keystore di
nome mystore che si trova nella directory dal quale è stato lanciato
il comando e al quale si accede attraverso la password abcd00 Infine con
l’opzione -dname e “cn=cbapplet”, viene specificato un X.500 Distinguished
Name (con common name cbapplet) per identificare un istanza del certificato
X.509.
Dopo la generazione delle chiavi, attraverso il tool jarsigner, si può procede alla firma dell’archivio che contiene l’applet : jarsigner -keystore mystore -storepass abcd00 -keypass kpi135 -signedjar smyapplet.jar myapplet.jar signapplet Con questo comando,
attraverso la chiave signapplet (alias precedentemente specificato) contenuta
nel keystore mystore si firma l’archivio myapplet.jar ottenendo così
smyapplet.jar.
Per poter distribuire la chiave pubblica agli utenti finali che la utilizzeranno per verificare l’applet, si effettua l’export del certificato nel seguente modo: keytool -export -keystore mystore -storepass abcd00 -alias signapplet -file signapplet.cer In questo caso, il certificato viene memorizzato nel file signapplet.cer.
keytool -import -alias csignapplet -file signapplet.cer -keystore cmystore -storepass abcdef In questo modo,
il certificato viene importato nel keystore cmystore con alias csignapplet.
Dopo aver importato il certificato, in un Policy file (Write.jp) e per ognuna delle risorse che saranno utilizzate, verranno definite le permission di accesso degli applets firmati da uno specifico signer : keystore “file :/d :/Tests/cmystore” ; // esempio
di Policy file
Queste ultime due operazione (quelle effettuate sulla macchina client) sono valide se si esegue l’applet con l’appletviewer nel seguente modo : appletview -J-Djava.security.policy=Write.jp http ://myweb.com/myapplet.htmlViceversa, nel caso in cui l’esecuzione dell’applet deve avvenire all’interno di un browser, le operazioni di import del certificato e di definizione delle permission sulle risorse del sistema dovranno essere effettuate con le funzionalità messe a disposizione dal medesimo browser. In particolare, nel caso in cui si utilizza IE le cose si complicano un po’ visto che tale browser riconosce CAB firmati con le CryptoAPI attraverso il tool sign.exe invece di JAR. Ovviamente, un pre-requisito a tutto questo è che i browser in questione supportino direttamente o indirettamente (Project Java Activator) la piattaforma Java 2. Configurazione
del Security Manager e utilizzo del Policy Tool
java.home\lib\security\java.securityL’elenco dei policy files all’interno di tale file va specificato nella seguente forma policy.URL.<i>=<url>Ad esempio, potremo avere : policy.url.1=$(java.home)/lib/security/java.policyI primi due sono rispettivamente il policy file di default del sistema e il policy file di default dell’utente, mentre la proprietà user.home assumerà a run-time uno dei seguenti valori a seconda della piattaforma sulla quale è in esecuzione la VM : Piattaforma user.home Windows NT C :\Winnt\Profiles\<user>
java -Djava.security.manager -Djava.security.policy=Altro.jp SomeApp
Da questa finestra,
sarà possibile aprire un file esistente oppure crearne uno nuovo
specificandone la path. Inoltre, è possibile modificare il keystore
a cui il file fa riferimento selezionando l’opzione “Change Keystore” dal
menù “Edit”:
Il JKS specificato nel campo New KeyStore Type è un tipo proprietario supportato dalla Sun. Dopo aver modificato il keystore, è possibile aggiungere al file una policy entry cliccando sul tasto “Add Policy Entry” della finestra iniziale (sempre da questa finestra è possibile attivare le funzioni per rimuovere e modificare una entry). Nella finestra che viene visualizzata è possibile impostare due parametri (entrambi opzionali) che sono il codebase da dove viene scaricato l’applet e l’alias con il quale è stato firmato :
In questo caso,
avendo impostato solo il codebase le permission che successivamente andremo
ad impostare saranno valide per ogni applet scaricato da tale directory
(sia esso firmato o non). Ovviamente, il codebase potrà essere
(anzi lo è quasi sempre) del tipo : http : //www.myweb.com.
In questo modo,
abbiamo abilitato gli applets alla lettura del D:\Temp\mydata.
JDK 1.1
javac myapplet.java jar -cvf myapplet.jar myapplet.class *.gif javakey -cs signapplet true javakey -gk signapplet signapplet_pub signapplet_priv javakey -gs dirsign myapplet.jar Dove dirsign è un file di direttive del tipo : #esempio di un file di direttive per la firma di un archivio JAR -signer=signapplet -cert=1 -chain=0 -signature.file=sapplet Dopo l’esecuzione del comando nel JAR sanno inclusi i seguenti files -sapplet.sf -sapplet.dsa javakey -gc dircer Dove dircer è un file di direttive del tipo: # esempio di un file di direttive per l’export del # certificatoissuer.name=signappletissuer.cert=1 subject.name=x subject.real.name=xxxx subject.org.unit=xxx subject.org=org subject.country=Italy start.date=1 Apr 1999 end.date=31 Dec 2000 serial.number=0001 signature.algorithm=DSA out.file= signapplet.cer javakey -c signappletjavakey -ic signapplet signapplet.cer [1] A.
Furome, Firma Digitale, Mokabyte, Ottobre 1999
|
|
||
|
||
MokaByte ricerca
nuovi collaboratori
|
||
|