MokaByte Numero 12 - Ottobre 1997

 
La  certificazione delle
 Applet in Java 
 
di
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
- Dario Bosi e' l'identita' del signer
- Il parametro true indica che l'identita' creata e' considerata sicura.

L'entita' Dario Bosi viene inserita in un file chiamato identitydb.obj

Per vedere le identita' contenute in questo file digitare:

javakey -ld
 
2 - Generazione delle chiavi
javakey -gk "Dario Bosi" DSA 512 dario.key
- L'opzione -gk significa generate keys
- Dario Bosi e' l'identita' di cui bisogna generare la chiave.
- DSA e' l'algoritmo di generazione delle chiavi.
- 512 e' la lunghezza della chiave in bytes. Se si vuole maggior sicurezza usare una chiave piu' lunga, ad esempio 1024
- dario.key e' il file dove viene messa la chiave pubblica. Essa viene anche registrata in identitydb.obj
 

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 Bosi
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
A questo punto digitare
javakey -gc dario1.dir
- L'opzione -gc significa generate certificate
- dario.cer e' il file contenente il certificato, che dovra essere criptato insieme all'applet.
 

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
- tutti e soli i .class e gli eventuali .gif del nostro applet devono essere nella directory corrente.
Cosi abbiamo generato myapplet.jar
 

5 - Aggiunta del certificato al file dario.jar

Dobbiamo creare un altro file di direttive dario2.dir :

signer=Dario Bosi
cert=1
chain=0
signature.file=dario
Il comando per firmare il file dario.jar con la direttiva dario2.dir (e quindi col certificato dario.cer) e' il seguente:
javakey -gs dario2.dir myapplet.jar
- L'opzione -gs significa generate sign
Si produce cosi un file myapplet.jar.sig che puo' essere rinominato myapplet.jar

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/

2 - 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

. CONCLUSIONI

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 rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it