|
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: 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 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.
|