MokaByte
Numero 12 - Ottobre 1997
|
|||
|
Applet in Java |
||
Dario BOSI |
Come rendere le proprie applet fidate agli occhi del browser | ||
PREMESSA
Java e' un liguaggio
di programmazione fondamentale per Internet.
Esso consente
che un programma residente su un server WWW venga scaricato dal client
ed eseguito in locale.
Questo causa
gravi problemi di sicurezza, perche', se non si adottassero opportune precauzioni,
dei programmi scritti da malintenzionati potrebbero causare gravi danni
al computer client collegato.
Ad esempio un
applet JAVA scritto con intenti ostili potrebbe acquisire informazioni
riservate dal client oppure addirittura potrebbe causare la cancellazione
dell'intero disco fisso.
La soluzione
adottata da tutti i browser in uso attualmente e' di far girare gli applet
JAVA in una safebox, cioe' in un ambiente protetto in cui sono del tutto
precluse determinate operazioni.
Le limitazione
pricipali sono:
- E' proibito
qualunque accesso al disco locale del client, sia in lettura che in scrittura.
- E' proibito
stabilire un connessione di rete con qualunque altro PC ad eccezione di
quello da cui e' stato scaricato l'Applet.
Queste limitazioni, se implementate in modo scrupoloso, riescono effettivamente a raggiugere l'obbiettivo della sicurezza, ma inibiscono all'Applet molte possibilita' comuni a quasi tutti i linguaggi di programmazione, come ad esempio l'utilizzo dei database e la comunicazione attraverso la rete tra diversi client.
La soluzione
che si pensa di adottare nei browser della prossima generazione e' la seguente:
- di default
rimangono fissate le limitazioni gia' viste.
- l'utente puo'
decidere, in determinati casi, di rimuovere in tutto o in parte le limitazioni
della safebox per applet sulla cui origine si sente tranquillo.
Per determinare
gli applet "di cui si puo' stare tranquilli" ci sono 2 possibilita':
1 - L'utente
indica, nelle impostazioni del browser, i nomi o gli indirizzi IP dei siti
di cui e' certo di potersi fidare.
2 - Il creatore
dell'Applet vi inserisce un "certificato", cioe' la firma digitale. del
programmatore o dell'azienda che lo ha realizzato. L'utente, quando riceve
un applet certificato, puo' decidere di fidarsi della persone che ha "firmato"
l'applet e permettere che esso venga eseguito, oppure negare il permesso
di esecuzione.
Da alcune prove che ho eseguito, Internet Explorer 4.0 beta 2 di Microsoft tenta di realizzare entrambe le strategie, ma i livelli di protezione java non funzionano ancora, cioe' il browser utilizza sempre le stesse limitazioni nella safebox qualunque sia il livello di protezione prescelto.
Netscape 4.01 invece punta decisamente sulla strada dei certificati.
FIRMA DIGITALE E CERTIFICATI
Si e' cominciato
a parlare di firme digitali e di certificati nell'ambito della posta elettronica
per garantire sicurezza e la riservatezza delle E-mail.
Tutta la teoria
sviluppata a questo proposito puo' benissimo essere applicata a qualsiasi
documento elettronico, e quindi anche agli applet java.
La firma digitale
si basa su due chiavi, una pubblica e una privata.
La chiave privata
e' conosciuta solo dal possessore della firma digitale, mentre la chiave
pubblica e' conosciuta da tutti coloro che sono autorizzati a leggere il
documento.
Per creare (criptare)
un documento sicuro e' necessario conoscere entrambe le chiavi.
Per leggere
(decriptare) il documento e' sufficiente conoscere la chiave pubblica.
Essa inoltre consente di certificare che il documento e' giunto inalterato
a destinazione.
Se non e' necessario
garantire la riservatezza del documento, ma solo la sua provenienza e al
sua integrita', (questo e' il caso degli applet), la chiave pubblica puo'
essere incorporata nel documento stesso.
A rigor di termini, un certificato e' un file che contiene la "firma digitale" del proprietario del certificato stesso ed anche la firma digitale di un ente di certificazione. Tuttavia spesso i termini "certificato" e "firma digitale" vengono usati come sinonimi.
Il legame tra un applet (o un qualsiasi altro documento) e il certificato digitale (o la firma digitale) deve osservare le seguenti spacifiche:
- Chiunque deve essere in grado di verificare la firma digitale di un documento per vedere se e' valida.
- Deve essere impossibile per chiunque tranne il possessore del certificato (che conosce la chiave privata) di attaccarlo ad un applet o ad un documento.
- Deve essere impossibile estrarre la firma digitale da un documento per attaccarla ad un altro.
- Deve essere impossibile per chiunque alterare il documento dopo che e' stato firmato con la firma digitale
- Deve essere impossibile anche per il firmatario togliere la firma dal documento dopo che esso e' stato creato.
COME OTTENERE UN CERTIFICATO
In linea di principio
ci sono 2 possibilita' :
1 - Realizzare
da se stessi il certificato e garantirlo "in proprio". A tal fine sono
disponibili opportune utility, di cui la piu' nota e' javakey, contenuta
nel JDK a partire dalla versione 1.1.2 (il javakey contenuto nel JDK 1.1.1
soffre di un grave bug). In realta', questa e' semplicemente una firma
digitale e non un certificato vero e proprio.
2 - Farsi certificare
da un ente di certificazione. Attualmente l'ente di certificazione piu
noto e' Verisign. Indirizzo: http://digitalid.verisign.com
Anche i programmatori
della lista java-it, come molti lettori gia sanno, stanno organizzandosi
per creare un ente di certificazione italiano.
Vedremo di descrivere entrambi i metodi per ottenere il certificato, precisando che per ora i due principali browser (Explorer e Netscape Navigator) non supportano javakey.
L'UTILITY JAVAKEY
Prendiamo ad esempio di dover certificare un applet creato da Dario Bosi.
Si presuppone di avere nel classpath il JDK 1.1.2 o successivi e la directory corrente di lavoro, e di avere nel path i file eseguibili del JDK, cioe' la directory bin
I passi da seguire
sono i seguenti:
1 - Creazione del signer
javakey -cs "Dario Bosi" true- L'opzione -cs significa create signer
L'entita' Dario Bosi viene inserita in un file chiamato identitydb.obj
Per vedere le identita' contenute in questo file digitare:
javakey -ld2 - Generazione delle chiavi
javakey -gk "Dario Bosi" DSA 512 dario.key- L'opzione -gk significa generate keys
3 - Generazione del certificato
Bisogna creare un file di direttive, che chiameremo dario1.dir e che sara' fatto piu' o meno in questo modo:
issuer.name=Dario BosiA questo punto digitare
issuer.cert=1
subject.name=Dario Bosi
subject.org.unit=Tortona On Line
subject.org=Tortona On Line s.r.l.
subject.country=Italy
start date=1 Apr 1997
end date=31 Dec 2000
serial.number=1
out.file=dario.cer
javakey -gc dario1.dir- L'opzione -gc significa generate certificate
4 - Creazione del file .JAR
A questo punto tutti i file .class e . gif che compongono il nostro applet devono essere fusi in un unico file di tipo .jar (java archive) Si usa l'utility jar. Il comando e':
jar cf myapplet.jar *.class *.gif- L'opzione cf significa create file
5 - Aggiunta del certificato al file dario.jar
Dobbiamo creare un altro file di direttive dario2.dir :
signer=Dario BosiIl comando per firmare il file dario.jar con la direttiva dario2.dir (e quindi col certificato dario.cer) e' il seguente:
cert=1
chain=0
signature.file=dario
javakey -gs dario2.dir myapplet.jar- L'opzione -gs significa generate sign
I passi 1, 2 e 3, che servono a procurarsi il certificato, vanno eseguiti una sola volta. Se li eseguissimo piu' volte avremmo piu' certificati con lo stesso nome ma diversi tra loro.
I passi 4 e 5, che servono a firmare l'applet, vanno ripetuti per ogni nuovo applet che vogliamo firmare usando sempre lo stesso file di certificato.
Come detto, purtroppo gli attuali browser non supportano questo tipo di firma.
Netscape 4.01
ed Explorer 4.0 beta 2 eseguono il file .jar ma non si accorgono della
presenza del certificato, per cui continuano ad utilizzare le limitazioni
della safebox. Le corrispondenti versioni 3.0 non riescono nemmeno a leggere
il formato .jar
LIMITI DELL'APPROCCIO JAVAKEY
Nel momento in cui l'utente dice al browser di fidarsi del certificato di Dario Bosi, deve essere l'utente stesso in un modo qualunque ad accertarsi che quell'applet sia veramente di Dario Bosi (e a dichiarare al browser che Dario Bosi e' un programmatore "sicuro").
In questo modo il browser memorizza la firma digitale di Dario Bosi e consente a tutti gli applet di Dario Bosi di girare liberamente al di fuori della safebox.
Come si puo'
facilmente verificare, chiunque puo' creare un certificato a nome Dario
Bosi (o con un qualsiasi nome di fantasia). Tuttavia il browser riconosce
benissimo che la nuova firma digitale Dario Bosi e' diversa da quella gia'
memorizzata, e la tratta come un nuovo certificato richiedendo nuovamente
il permesso dell'utente prima di abilitare l'applet.
(il bug del
JDK 1.1.1, poi corretto nel JDK 1.1.2, consisteva apppunto nel non riuscire
a rilevare la differenza tra due diversi certificati con lo stesso nome)
A mio avviso l'approccio javakey e' idoneo per le intranet o comunque per dei gruppi chiusi di utenti, ma non per la internet in generale.
OTTENERE UN CERTIFICATO DA UN ENTE DI CERTIFICAZIONE
I cosiddetti enti di certificazione sono entita' indipendenti che rilasciano il un certificato il quale garantisce (entro certi limiti) l'identita' del possesore del certificato stesso.
L'ente piu' noto
di questo tipo e' Verisign. Esso concede diverse classi di certificazioni.
Ho provato ad ottenere la certificazione di livello piu' basso, che viene
concessa gratuitamente ed e' valida per 6 mesi (mentre le altre sono a
pagamento).
La prova e'
stata eseguita con Netscape Communicator 4.01
I passi da compiere
per ottenere la certificazione sono:
1 - Chiamare Verisign all'indirizzo http://digitalid.verisign.com/. CONCLUSIONI2 - Cliccare su "Requst an ID"
3 - Scegliere come browser Netscape (non ho verificato cosa succede scegliendo Explorer).
4 - Scegliere "Free trial class 1".
5 - Compilare la form. Scegliere free. Accettare.
6 - (facoltativo) Immettere una password per il communicator.
7 - La nostra Digital-ID ci viene inviata via E-Mail. In effetti l'unico controllo effettuato da Verisign e' che noi possediamo veramente la casella di posta che abbiamo dichiarato nella form.
8 - Seguire il link proposto.
9 - Immettere la Digital-ID ricevuta via E-Mail
10 - Premere OK per installare il certificato sul Communicator.
11 - Possiamo visualizzare il certificato usando il menu Security - certificates - your e possiamo esportarlo su un file con l'opzione export.
12 - Effettuare il download dell'utility jar packager dall'inidirizzo
http://developer.netscape.com/software/signedobj/jarpack.html#jarpack
e leggere anche attentamente le istruzioni in linea.13 - Con il jar packager comprimere i file .class e .gif in un archivio .jar e aggiungere la firma digitale
La materia della
certificazione e' ancora molto giovane e la mia impressione e' che non
ci siano ancora degli standard sufficientemente definiti.
Anche dal punto
di vista tecnico molte cosa funzionano solo in modo embrionale. Ad esempio
non sono riuscito a far funzionare il jar packager di Netscape, che invece
di crearmi il file .jar mi ha creato solo dei file temporanei.
Inoltre e' abbastanza
grave che almeno per ora Netscape ed Explorer non supportino lo standard
javakey proposto da Sun.
Tuttavia ritengo che la certificazione delle Identita' sulla rete sia di estrema importanza per il futuro, non solo per i controlli di sicurezza ti tipo "tecnico", ma anche per applicazioni inerenti il commercio elettronico ed i pagamenti sicuri On Line, nelle quali il linguaggio Java avra' una parte preponderante anche se non esclusiva.
Ritengo inoltre che, al fine della diffusione massiccia di queste applicazioni, debbano sorgere degli enti di certificazione solidi e che riscuotano fiducia diffusa sia tra i programmatori che tra gli utenti.
Ing. Dario BOSI
Tortona (AL)
- tel. 0131/812181
E-Mail: Dario.Bosi@tor.it
|
||
|
||
MokaByte ricerca
nuovi collaboratori
|
||
|