Per far andare ssl in Java c'? la libreria JSSE(Java Secure Sockets Extension) cha va installata nel seguente modo:
---------
1) Copiare in JAVA_HOME/jre/lib/ext i file jcert-jar , jnet.jar e jsse.jar(se hai pi? installazioni Java, come su windows quella del jkd e quella del jre, o ne togli una o metti i jar da tutte e due le parti)
2) Apri il file java.security e cerchi le seguenti riche(# sono commenti):
security.provider.1=sun.security.provider.Sun
#altre righe
security.provider.2=sun.net.ssl.internal.ssl.Provider
se l'ultimo numero che hai ? per dire 4 invece che 2 dovrai mettere 5:
security.provider.5=sun.net.ssl.internal.ssl.Provider
(solito discorso, se hai altre installazioni di jre o le togli o modifichi anche il loro java.security).
-------
Il tuo codice non posso provarlo visto che non ho installato ssl sul pc adesso.
Per quanto riguarda le firme digitali con la privata firmi i dati e la pubblica potr? girare per il web senza problemi visto che pu? solo verificare, ti faccio vedere un esempio, a parametro dovrai passare il testo da firmare, io ho fatto con Prova, per usare frasi basta mettere tra ""(es."Testo di prova"
:
-------
import java.security.*;
import sun.misc.*;//per usare BASE64, un byte normale ha 8 bits ma l'ASCI ne usa solo 7
public class Firma {
public static void main(String args[]) throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"
;//genera copia con RSA
kpg.initialize(1024);//chiavi da 1024 bits
KeyPair kp = kpg.genKeyPair();//genera chiavi
byte[] dati = args[0].getBytes("UTF8"
;//converti parametro in bytes
Signature sig = Signature.getInstance("MD5WithRSA"
;//usa l'algoritmo MD5WithRSA di firma
sig.initSign(kp.getPrivate());//usa la privata per firmare
sig.update(dati);//inserisci i dati in chiaro
byte[] firmati = sig.sign();//firmali e metti in firmati
System.out.println("Firma: " + new BASE64Encoder().encode(firmati));//stampa la firma
sig.initVerify(kp.getPublic());//usa la pubblica per verificare
sig.update(dati);//controlla la firma sui dati dentro l'arry "dati"
if(sig.verify(firmati)) System.out.println("\nFirma valida su dati"
;//controlla se sono validi
if(!sig.verify(dati)) System.out.println("\nFirma non valida, dati non ? la firma di dati"
;//dimostra che usando i dati in chiaro come firma la verifica fallisce
}
}
-------
Questo esempio funziona l'ho provato(jdk 1.5, secondo lo standard dalla 1.3 in poi funziona).
Per salvare le chiavi esiste una tecnica che si chiama PBE(Password Based Encryption).
Questo argomento e altri sulla cifratura con java li ho trattati in un articolo:
pierotofy.it/pages/guide/…
Magari potr? esserti utile, solo una pecca: uso una libreria di terzi visto che quella di Sun ? relataivamente limitata, cmq trovi esempi e libreria tutti qui:
pierotofy.it/data/programs/Java/…
Se hai altre domande sempre disponibile, intanto per approfondire al meglio un argomento importante come la sicurezza ti consiglio "Sicurezza in Java" di Jess Garms e Daniel Somerfield, costava 40 euro quando l'ho preso.
ciao