Anzitutto perchè occore "firmare" una applet?
Le applet vengono eseguite in un contesto particolare di sicurezza (sandbox) per cui non possano causare "danni" volontari o meno all'utente che le esegue nel proprio browser.
Una applet è una classe java che estende l'oggetto java.apple.Applet e ne sovraccarica alcuni metodi (tipicamente: init, start, stop, destroy e paint).
Di default è sottoposta a restrizioni e si dice che è una applet "unsigned" (non firmata). Alcune delle restrizioni sono le seguenti:
- può "parlare" solo con il server su cui è collocata: non può comunicare con altri!
- Non può leggere file dal server se questi sono oltre un certo livello di gerarchia di cartelle (sopra il padre per esempio)
- Non può accedere nè in lettura nè in scrittura ai file della macchina locale che la esegue nel browser
Ci sono anche altre limitazioni per le quali vi invito a leggere questa ottima guida riassuntiva:
Tali restrizioni non sono applicate ad una Applet SIGNED (firmata). Vediamo quindi come firmare la nostra.
PREREQUISITI:
Per eseguire questo tutorial è necessario disporre delle seguenti cose:
- Java installato e configurato correttamente (Nel mio esempio ho la JDK 1.6, ma vanno bene anche le precedenti)
- Eclipse J2EE
Ecco un riassunto degli step da compiere:
- Esportare la applet in un file jar
- Creare un file "keystore" per associare una chiave privata al jar tramite keytool
- Firmare il file jar con il tool jarsigner e creare il certificato
- Creare la pagina html con i giusti riferimenti per utilizzare il jar firmato
1 - Esportare la applet in un file jar
Ho utilizzato Eclipse (versione 3.2 Helios J2EE) per questa operazione, ma java fornisce già un tool per fare tutto da console. In Eclipse è sufficiente cliccare il destro sul package che contiene la applet e scegliere "Export > jar".
Indicare il file e il percorso dove vogliamo creare il jar e lasciare le altre opzioni di default
In questo esempio la mia applet si chiama "SimpleWSApplet" ed è contenuta nel package "wstest"
Ho esportato quindi la classe nel file "wstest.jar" sul desktop.
2 - Creare un file "keystore" per associare una chiave privata al jar tramite keytool
Aprire il terminale (su Windows: "Start > Esegui > cmd") e portarsi nella cartella che contiene il jar da associare alla chiave. Nel mio esempio: "cd Desktop"
Eseguire keytool. Nel mio caso, dato che Java è installato nella cartella "C:\java\jdk1.6.0_23" ho usato il seguente comando:
C:\java\jdk1.6.0_23\bin\keytool.exe -genkey -alias www.mio_sito_web.it -keyalg RSA -keystore .\nome_file_keystore.jks
Nella procedura guidata, è importante che associate il sito web usato nell'alias e che utilizziate lo stesso nel prossimo step.
Gli altri dettagli sono a vostra discrezione e compariranno nel certificato.
Verrà creato il file "nome_file_keystore.jks" sul Desktop.
3 - Firmare il file jar con il tool jarsigner e creare il certificato
Eseguire jarsigner. Nell'esempio ho usato i seguenti parametri per il comando:
C:\java\jdk1.6.0_23\bin\jarsigner.exe -keystore .\nome_file_keystore.jks .\wstest.jar www.mio_sito_web.it
Verrà modificato il file wstest.jar, firmandolo ed associandoci un certificato con una certa validità.
4 - Creare la pagina html con i giusti riferimenti per utilizzare il jar firmato
Apriamo notepad e creiamo la pagina per testare il nostro jar firmato. Il codice che ho usato è il seguente:
<html>
<head>
<title>Signed Applet Test</title>
</head>
<body>
<p>Test di una applet firmata</p>
<br />
<applet width="400" height="400" code="wstest.SimpleWSApplet.class" archive="wstest.jar>Applet not supported in your browser</applet>
</body>
</html>
Salviamo il file come "prova_applet.html" nella stessa cartella che contiene il jar e apriamolo in un browser.
Ci viene rischiesto di accettare il certificato per permettere alla applet di funzionare.
That's all folks..