Login
Cerca all'interno di JavaPortal
Help
Home Page Documentazione Forum Progetti Partner Pubblica!
Documentazione > Tutorial > I Certificati Digitali per la firma di Applet
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy

Hai una tesi in Java?
Tesine preparate
per esami?
Pubblica tutto su
JavaPortal!

Scrivi al nostro staff


Javaday Roma 2009: Ecco le slide


Chi controlla il passato controlla il futuro..
..Chi controlla il presente controlla il passato. George Orwell


Vantaggi dell’uso di portali JSF e JSR 168 per sviluppare applicazioni Ajax


Rss Feed
Home Page
Articoli
News
Forum
Classi

  Visualizza Commenti (0) Aggiungi Commento    
Add to Shortcuts
 
Vota l'articolo
I Certificati Digitali per la firma di Applet
By Fabrizio Marini
8 agosto 2005
Valutazione Acquisita: 40

  I Certificati Digitali per la firma di Applet
Program Creazione di un Certificato Digitale: linee generali
Program Comprare o generare un Certificato Digitale: come e perché?
Program Creazione dei Certificati Digitali di test
Program Introduzione
Program HTML files
Program Web Server

(Guida valida per JDK 1.1.x) 

Firmare un applet con un certificato è obbligatorio quando l'applet deve accedere alle risorse locali della macchina client su cui è in esecuzione. Ad un Applet infatti è solamente consentito leggere file, tramite protocollo http, o aprire porte sulla macchine da cui è stato scaricato. Un certificato digitale per la firma di un applet è composto da due parti....



Creazione di un Certificato Digitale: linee generali top
Firmare un applet con un certificato è obbligatorio quando l'applet deve accedere alle risorse locali della macchina client su cui è in esecuzione. Ad un Applet infatti è solamente consentito leggere file, tramite protocollo http, o aprire porte sulla macchine da cui è stato scaricato. Un certificato digitale per la firma di un applet è composto da due parti: il vostro certificato pubblico e la vostra chiave privata. La chiave privata è quella che dovete usare per firmare il vostro codice; il certificato pubblico è ciò che gli altri devono usare per verificare che il vostro codice sia stato firmato con la vostra chiave privata. Nel nostro caso solo se certificato pubblico e chiave privata coincidono allora l'applet potrà funzionare. Da questo momento indicherò con la parola certificato Digitale l'insieme del certificato pubblico e della chiave privata.


Comprare o generare un Certificato Digitale: come e perché? top
Esistono due modi di ottenere un certificato digitale, comprarlo o generarlo. Per comprare un certificato, basta collegarsi ad uno dei tanti siti di CA (Certificate Authority) riconosciute, come per esempio VeriSign (www.verisign.com) ed richiederne uno. Verranno mandati da questo ente almeno due file uno su standard x509 (certificato pubblico) e l'altro in formato PKCS12 (chiave privata). Il file in formato x509 è il certificato che dobbiamo dare a terzi se vogliamo che questi siano in grado di utilizzare l'applet firmata con la firma in formato PKCS12. E' importante notare che i certificati pubblici delle CA sono già installati nei più famosi Browser. Il file PKCS12 deve essere installato nel Browser, della persona, che di solito coincide con il programmatore, che firmerà l'applet. Volendo esistono degli strumenti, come il famoso SSLeay per Linux, che ci permettono di scavalcare la CA e di produrci il nostro certificato. La differenza sta nel fatto che i certificati così prodotti non vengono automaticamente riconosciuti come una CA accreditata dai Browser ed in più Il certificato x509 deve essere distribuito tramite Web con procedure automatiche che verranno descritte in seguito. Questi certificati possono però andare benissimo all'interno di una Intranet aziendale o su Internet su specifici Clienti che ci conoscono.


Creazione dei Certificati Digitali di test top
Il programmatore ha degli strumenti a disposizione per generare velocemente dei certificati detti di "Test" e che vengono riconosciuti solo dallo specifico Browser con i cui tools sono stati prodotti. A differenza di quelli acquistati dalle CA (o prodotti con SSLeay) che valgono, naturalmente, per tutti i Browser. Per fare un esempio Netscape non ci consente di definire la data di scadenza, del certificato di test prodotto,che viene fissata di default a tre mesi. Ogni Browser producendo i certificati di Test fa in maniera tale che quel certificato o sia limitato o non sia importabile in altri browser. Questi certificati consentono quindi solo di Testare l'applet durante lo sviluppo.


Introduzione top

Per la creazione dei certificati digitali di test, consideriamo di utilizzare le ultime versioni di Netscape ed Internet Explorer, inoltre terremo in considerazione il fatto che l'Applet sia stata creata con la piattaforma JDK 1.1.x. Prima di iniziare è opportuno informare che le procedure che seguiranno sono state realizzate considerando l'applet già creato, inoltre bisogna dire che verranno create tre diverse versioni di Applet firmate perchè ogni browser utilizza procedure, tools di creazione e standard differenti per associare la firma all'applet. Infatti firmare un applet, significa associargli un certificato, l'unica maniera di farlo è quella di inglobare le classi ed il certificato in un archivio di tipo Jar. Purtroppo i file Jar sono uno standard per i Browser solo se non contengono i certificati. I file Jar firmati con i tools della Netscape non sono più compatibili con i prodotti della sun ed in più Internet Explorer associa la firma alle classi tramite un file di tipo cab. Un perfetto equilibrio di non compatibilità. Quindi riassumendo, sia acquistando il certificato, che producendo quello di test, per farlo funzionare sui vari browser dobbiamo farne una specifica versione per ognuno. Consideriamo di aver scritto l'Applet "Operazioni.java" e che il bytecode dell'Applet si trovi nella directory C:\tmp. Quindi in C:\tmp avrò solo il file Operazioni.class. Per la creazione dei certificati di test:

  • NETSCAPE

Prima di creare o di importare una qualsiasi chiave privata per la firma delle applet è necessario impostare una password personale in Netscape, per farlo basta entrare in Security cliccando sull'icona che raffigura il lucchetto:


Fig. 1  I Certificati Digitali per la firma di Applet

Per impostare la password è sufficiente cliccare sull’omonima voce. A questo punto apparirà la seguente questa finestra:


Fig. 2  I Certificati Digitali per la firma di Applet

Ora sarà sufficiente cliccare sul pulsante set password, apparirà un’altra finestra nella quale sarà possibile inserire la nuova password.

IMPORTANTE: Una volta impostata la password bisogna chiudere tutte le finestre di Netscape.

Netscape usa, per la firma dell’applet, Signtool (attenzione alle versioni, prendete quella che è valida dal 01.01.2000 in poi) che bisogna scaricare dal sito http://developer.netscape.com/ e le CAPSAPI (Netscape Capabilities Class) con le quali è necessario modificare l’applet inserendo l’opportuno import. Prima di ogni chiamata ‘pericolosa’ all’interno dell’applet è inoltre necessario specificare i privilegi che si vogliono fornire all’applet.

Signtool è facile da usare, crea un Jar file che però ma può girare solo su Netscape e può durare solo pochi mesi in quanto la data di scadenza del certificato viene automaticamente fissata dopo tre mesi dalla creazione.La maniera corretta di creare un certificato digitale con Signtool è descritta in tutte le sue parti qui di seguito.
Prima di tutto bisogna scaricare quindi:

signtool
http://developer.netscape.com/software/signedobj

capsapi_classes.zip
http://developer.netscape.com/docs/manuals/signedobj/capsapi.html

Maggiori informazioni sui Target per la sicurezza sono disponibili su: http://developer.netscape.com/docs/manuals/signedobj/javadoc/netscape_security_Target.html
http://developer.netscape.com/docs/manuals/signedobj/targets/index.htm

La documentazione del package netscape.sicurity si trova su:
http://developer.netscape.com/docs/manuals/signedobj/javadoc/Package-netscape_security.html

Altre informazioni su "Object Signing and Java" sul sito di Netscape: http://developer.netscape.com/docs/manuals/java.html

Prima della chiamata non consentita, bisogna chiamare le capsapi ed assegnare un opportuno target.
Vediamo un esempio di codice:

//inizio esempio

 

import netscape.security.*;

....

try

   {

    PrivilegeManager.enablePrivilege("UniversalFileWrite");

    ou = new FileWriter(fd.getDirectory()+fd.getFile());

    BufferedWriter out = new BufferedWriter(ou);

    out.write("Prova ...");

    out.close();

   }

catch (IOException e)  

  {   

    System.err.println(e);  

  }

....

 

//fine esempio


Nota:
E' sempre meglio fare controlli come di seguito descritto prima di settare un PrivilegeManager:

try

{

 if (Class.forName("netscape.security.PrivilegeManager")!=null)

 {

  netscape.security.PrivilegeManager.enablePrivilege("UniversalConnect");

 }

}

catch (Throwable te) { . }

Netscape permette di "Testare" l'applet senza dover generare certificati, ma in ogni caso dopo aver inserito le opportune chiamate alle capsapi.
Per farlo è necessario modificare il file Prefs.js che di solito si trova nel percorso: c:\Programmi\Netscape\User\Prefs.js

Bisogna inserire la seguente riga:
“User_pref(“SIGNED.APPLETS.CODEBASE_PRINCIPAL_SUPPORT”, TRUE);

IMPORTANTE:
Ricordarsi di impostare la password prima di lanciare i seguenti comandi.

Con questo comando creo il certificato riconosciuto con l’identificativo K-Tech, le parole in neretto sono quelle da inserire.

c:\> signtool -G K-Tech -d "c:\Program Files\Netscape\Users\K-Tech"

using certificate directory: c:\Programmi\Netscape\Users\K-Tech

WARNING: Performing this operation while Communicator is running could cause
corruption of your security databases. If Communicator is currently running,
you should exit Communicator before continuing this operation. Enter
"y" to continue, or anything else to abort: Y

Enter certificate information. All fields are optional. Acceptable
characters are numbers, letters, spaces, and apostrophes.
certificate common name: K-Tech
organization: K-Tech srl
organization unit: Sviluppo Software
state or province: Roma
country (must be exactly 2 characters): IT
username: K-Tech
email address: K-Tech@K-Tech.it
Enter Password or Pin for "Communicator Certificate DB": *******
generated public/private key pair
certificate request generated
certificate has been signed
certificate "K-Tech" added to database
Exported certificate to x509.raw and x509.cacert.

Ottengo come risultati due file:
x509.raw
x509.cacert

a questo punto K-Tech è inserito nel database di Netscape ed appare in YOURS.

 

Fig. 3 I Certificati Digitali per la firma di Applet

Se poi si clicca sul pulsante view appaiono le specifiche del certificato.

 

Fig. 4 I Certificati Digitali per la firma di Applet

Premendo invece Verify si può notare come il certificato non venga riconosciuto come valido (in quanto di Test):

Verification of the selected certificate failed for the following reasons:

K-Tech
- Not certified for E-Mail
K-Tech[Certificate Authority]
- Not a valid Certificate Authority
- Certificate not trusted

Il file x509.cacert viene anche automaticamente inserito tra i Signers.

 

Fig. 5 I Certificati Digitali per la firma di Applet

Così vengono modificati i files cert7.db key3.db e vengono prodotti i certificati: x509.raw e x509.cacert. Se avessi acquistato il certificato questo mi sarebbe stato dato in formato: Certificato.p12 e lo avrei potuto importare in YOURS. A questo punto posso firmare il codice e produrre il file JAR firmato.

c:\> signtool -k K-Tech -Z Operazioni.jar -d "c:\Programmi\Netscape\Users\K-Tech" c:\tmp

using certificate directory: c:\Programmi\Netscape\Users\K-Tech
Generating c:\tmp/META-INF/manifest.mf file..
--> Operazioni.class
adding c:\tmp/Operazioni.class to Operazioni.jar...(deflated 47%)
Generating zigbert.sf file..
Enter Password or Pin for "Communicator Certificate DB": *******
adding c:\tmp/META-INF/manifest.mf to Operazioni.jar...(deflated 15%)
adding c:\tmp/META-INF/zigbert.sf to Operazioni.jar...(deflated 27%)
adding c:\tmp/META-INF/zigbert.rsa to Operazioni.jar...(deflated 17%)
tree "c:\tmp" signed successfully

  • INTERNET EXPLORER

Prima di tutto bisogna scaricare dal sito della Microsoft, il necessario per firmare gli applet. Il tutto lo si può trovare nel SDK per Java (22 Mb) download SDK Java:
http://www.microsoft.com/java/sdk/
Una volta scaricato l'sdk ed installato, abbiamo a disposizione tutto quello di cui abbiamo bisogno, tra l'altro molto ben documentato e con molti esempi a corredo.
Come con Netscape dobbiamo modificare il sorgente per dare i permessi prima delle chiamate non sicure, l'unica differenza è che il sorgente deve essere modificato solo se l'applet compie operazioni pericolose nel suo costruttore di default, o nei metodi init, start, stop o destroy. Altrimenti basta firmare l'applet così come è senza aggiungere ne import ne codice.

Nota: il package da importare viene installato dall'sdk ( e/o da Internet Explorer ) solitamente sotto la directory Windows\Java\…

I nomi dei packages sono poco esplicativi sul mio PC dove ho Win98 ho trovato le classi della sicurezza nella seguente libreria:
c:\windows\java\packages\agfn9njl.zip

//inizio esempio

import  com.ms.security.*;

....

try

   {

    PolicyEngine.assertPermission(PermissionID.FILEIO);

    ou = new FileWriter(fd.getDirectory()+fd.getFile());

    BufferedWriter out = new BufferedWriter(ou);

    out.write("Prova ...");

    out.close();

   }

catch (IOException e)

   {

     System.err.println(e);  

   }

....

//fine esempio.

I file di cui abbiamo bisogno sono:
cabarc // per creare i files cab che sostituiscono i jar (nel caso di applet firmati)
makecert // per creare i certificati
cert2spc // per convertire i certificati in formati spc
signcode // per firmare i cab

nel nostro esempio se ci troviamo dentro c:\tmp:
cabarc <N> <File.cab da creare> <files da mettere nel cab>
C:\ > cabarc N Operazioni.cab Operazioni.class o (*.class e eventuali altri file)
Creiamo il certificato K-Tech.cer con il subjectKey (sk) K-Tech e con il nome del Publisher's certificate "CN=K-Tech".
C:\ > makecert -sk K-Tech -n "CN=K-Tech" K-Tech.cer
Convertiamo il certificato in un test Software Publisher Certificate (SPC) usando l'utility cert2spc.
C:\> cert2spc K-Tech.cer K-Tech.spc
Uso a questo punto l'applicazione signcode per firmare il cab file con i permessi di cui ho bisogno:
c:\> signcode -j javasign.dll -jp low -spc K-Tech.spc -k K-Tech Operazioni.cab
-jp può assumere i valori low, medium, high (Security Flags Level)
n.b.) dalla verione 3.02 di IE in poi è bene inserire il flag -r (crea un self signed certificate).
I certificati cosi prodotti vengono riconosciuti come una Test Root CA, e sono validi solo per il test ed il debugging delle applet, solitamente non sono abilitati per ovvi motivi di sicurezza, per abilitarli durante la vostra sessione di Test bisogna dare il seguente comando:
setreg 1 TRUE
ed alla fine della vostra sessione di prove e/o test bisogna ricordarsi di impostare nuovamente il valore a false (setreg 1 FALSE) , altrimenti il vostro computer accetta certificati di Test da chiunque.

A questo punto abbiamo creato il certificato e abbiamo la nostra chiave pubblica, la chiave privata, invece, viene automaticamente inserita in un database interno di Internet Explorer. Per importare il nostro certificato, con Internet Explorer 5.0 è sufficiente cliccare sul file *.cer. Si può vedere il file importato all'interno di Internet Explorer entrando dalla barra strumenti in Strumenti, da lì cliccare su Opzioni Internet.
La schermata che si vedrà è la seguente :

 

Fig. 6 I Certificati Digitali per la firma di Applet

Cliccando, poi, in alto su contenuto otterremo la seguente finestra:

Fig. 7 I Certificati Digitali per la firma di Applet

Cliccando su certificati e poi su Autorità di certificazione intermediarie potremmo vedere il nostro certificato pubblico.

Fig. 7 I Certificati Digitali per la firma di Applet

Se vogliamo testare il tutto:
c:\> chkjava Operazioni.cab

Se avete acquistato il certificato da una CA riconosciuta, è sufficiente importare il certificato pkcs12 e poi dare semplicemente il comando:
c:\> signcode -cn K-Tech Operazioni.cab

- SUN:
Con i prodotti Sun è necessario installare una versione di Jdk 1.1.x ed utilizzare il tool Javakey. Solo con prodotti Sun sarà possibile vedere quest'applet firmato.

SUN (JDK 1.1.x):
1) Scrivere il seguente bat file "procedura_firma.bat":

rem Step 1. Create the Ktech identity, as a trusted identity

javakey -cs Ktech true

rem Step 2. Generate a keypair for Ktech, and store the public key in a file named
rem Ktech_pub and the private key in a file named Ktech_priv

javakey -gk Ktech DSA 512 Ktech_pub Ktech_priv

rem Step 3. Generate an x509 certificate for Ktech, and store it in the file
rem named Ktech.x509. This output file name is given in the directive file
rem named cert_directive_Ktech.

javakey -gc cert_directive_Ktech

rem Step 4. Create the archive.

jar cf signedKtech.jar Operazioni.class // oppure *.class *.html etc...

rem Step 5. Sign the archive, using the parameters given in sign_directive_Ktech.

javakey -gs sign_directive_Ktech signedKtech.jar

rem Step 6. Move the signed archive to a file suffixed in .jar.

copy signedKtech.jar.sig signedKtech.jar

rem Step 7. Show the contents of the signed archive.

echo " "
echo "Contents of the archive are: "
jar tvf signedKtech.jar

rem Step 8 . Show the contents of the identity database.

echo " "
echo "Contents of the identity database are: "
javakey -ld

2) Scrivere il seguente file di parametri "cert_directive_Ktech":
rem This is a sample certificate directive file.

rem the id of the signer
issuer.name=Ktech S.r.l.

rem the cert to use for the signing
issuer.cert=1

rem the id of the subject
subject.name=Ktech S.r.l.

rem the components of the X500 name for the subject
subject.real.name=Ktech S.r.l.
subject.org.unit=Ktech S.r.l. (Direzione Tecnologica)
subject.org=Ktech S.r.l. (Servizi Tecnologici)
subject.country=IT

rem Various parameters: start and end date for validity and expiration
rem of the certificate. Serial number. FIle to which to output the
rem certificate (optional).
start.date=01 Oct 1999
end.date=22 Apr 2030
serial.number=1001
out.file=Ktech.x509

3) Scrivere il seguente file di parametri "sign_directive_Ktech":
rem Jar signing directive. This is the directive file used by javakey to
rem sign a jar file.

rem Which signer to use. This must be in the system's database.
signer=Ktech S.r.l.

rem Cert number to use for this signer. This determines which
rem certificate will be included in the PKCS7 block. This is mandatory
rem and is 1 based.
cert=1

rem Cert chain depth of a chain of certificate to include. This is
rem currently not supported.
chain=0

rem The name to give to the signature file and associated signature
rem block. (i.e. KtechSIGN.SF and KtechSIGN.DSA). This must be 8
rem characters or less.
signature.file=KthSig

-------
A questo punto ho il file jar firmato, ed ho i files:
Ktech.x509 / Ktech.priv / Ktech.pub
Certificato / chiave privata / chiave pubblica

Il certificato x509 può essere importato in ogni jdk con i seguenti comandi:
a)Create the Ktech identity, as a trusted identity
c:\> javakey -cs Ktech true

b)Import Certificate
c:\> javakey -ic Ktech Ktech.x509
javakey -ic <id> <cert>

Il jdk inserisce la chiave p12 nel file "identitydb.obj" che di solito si trova nella directory principale di dove è stato installato il prodotto.



HTML files top

Alcuni esempi di files html che devono essere prodotti per far caricare l'applet dai diversi Browser:

Netscape:
<applet
code=Operazioni.class
width=200
height=200
archive=Operazioni.jar>
</applet>

Internet Explorer:
<applet
code=Operazioni.class
width=200
height=200>
<param name="cabinets" value="Operazioni.cab">
</applet>

Internet Explorer + Netscape:
<applet
code=Operazioni.class
width=200
height=200
archive=Operazioni.jar>
<param name="cabinets" value="Operazioni.cab">
</applet>



Web Server top
Affrontiamo ora il problema di rendere il più automatico possibile l'importazione di un certificato pubblico di tipo x509.
Bisogna prendere il certificato e renderlo disponibile sul Web Server da cui si vuole caricare l'applet firmata. Naturalmente prima di caricare l'applet bisogna importare il certificato. Per esempio con Apache bisogna andare nella configurazione del Web Server e modificare:
sotto la directory ...\Apache\conf il file "mime.types" aggiungendo
"application/x-x509-ca-cert cacert cer der",
praticamente così si dice che i file con estensione cacert, cer e der (sono le possibili estensioni di un certificato pubblico) sono associati a quel tipo di MIME TYPE.
A questo punto possiamo mettere un link su una pagina html al certificato.
LINK:
<a href="x509.cacert">Click to import certificate</a>

 A questo punto se il mime type è settato e se il certificato è presente sul web server, chiunque clicchi sul link descritto, parte una procedura automatica del Browser per l'importazione del certificato.

Internet Explorer riconosce subito i certificati con estensione crt, ed infatti se ne abbiamo uno su disco, basta cliccarci sopra per importarlo automaticamente.

Una volta che il link è presente su una pagina html, se il browser che usate è Internet Explorer l'immagine che apparirà cliccando sul link è la seguente:

Fig. 9 I Certificati Digitali per la firma di Applet

Per avviare la procedura di importazione automatica del certificato bisogna selezionare Apri il file, a questo punto apparirà la seguente finestra:

Fig. 10 I Certificati Digitali per la firma di Applet

Con Netscape, invece, la finestra che ci apparirà immediatamente dopo aver cliccato sul link del certificato è la seguente:

 

Fig. 11 I Certificati Digitali per la firma di Applet



Username:
Password:
To sign up for an account, click register... Register
Hide





Powered By



Campagna Anti-IF


Skin


PARTNER
Zio Budda
HostingJava


LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is domenica 1 agosto 2010