Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Prelevare x509, Chiave privata da Keystore pkcs#12
Forum - Java - Prelevare x509, Chiave privata da Keystore pkcs#12

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
ermasto (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/06/2006

Segnala al moderatore
Postato alle 19:20
Martedì, 06/06/2006
salve a tutti questo è il mio primo post su questo forum e mi servirebbe un aiuto su un problema java che mi affligge.
Ho una CA che emette certificati e mi faccio dare da essa un Keystore PKCS#12 ora devo sviluppare un client java che da questo keystore preleva e risalva in formato .der il certificato x509 che mi servirà in seguito e che mi prelevi anche la chiave privata che userò per firmare alcuni messaggi.
Ho visto che esiste keytool che fa queste cose ma mi serve un programmino java che devo importare su più macchine.
Spero che mi potete aiutare
Aspetto vostre notizie, grazie
Ciao Ciao

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:48
Martedì, 06/06/2006
:-|

Ma keytool non è distribuito assieme al JDK e quindi è disponibile per tutte le piattaforme?


Il mio blog: https://piero.dev
PM Quote
Avatar
ermasto (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/06/2006

Segnala al moderatore
Postato alle 19:53
Martedì, 06/06/2006
Testo quotato

Postato originariamente da pierotofy:

:-|

Ma keytool non è distribuito assieme al JDK e quindi è disponibile per tutte le piattaforme?



in effetti non sono stato chiaro, mi serve in java   perche deve essere fatto in automatico senza che l'utente digita ogni volta i comandi

PM Quote
Avatar
ermasto (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/06/2006

Segnala al moderatore
Postato alle 21:09
Martedì, 06/06/2006
KeyStore ks = KeyStore.getInstance("PKCS12");
InputStream in = new FileInputStream("x509pri.p12");
ks.load(in,null);
PrivateKey priv = (PrivateKey) ks.getKey("","");
java.security.cert.Certificate cert = ks.getCertificate("");
byte[] encodedCert = cert.getEncoded();

FileOutputStream certfos = new FileOutputStream("suecert.der");
certfos.write(encodedCert);
certfos.close();

allora ho trovato questo programmino che fa al caso mio ma ho due piccoli problemini
nel metodo ks.getkey() vuole essere passato l'alias e la password, ma il problema è che non so qual'è l'alias del mio certificato e lo stesso vale per il metodo getCertificate. c'è un modo per rimediare a ciò??

Grazie mille

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:27
Mercoledì, 07/06/2006

PM Quote
Avatar
ermasto (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/06/2006

Segnala al moderatore
Postato alle 16:18
Giovedì, 08/06/2006
ho provato con aliases il codice è il seguente:

KeyStore ks = KeyStore.getInstance("PKCS12");
InputStream in = new FileInputStream("e://x509pri.p12");
ks.load(in, null);
Enumeration aliases = ks.aliases();
String alias=null;
while(aliases.hasMoreElements())
{    
alias = (String)aliases.nextElement();
System.out.println(alias);
}
PrivateKey priv = (PrivateKey) ks.getKey(alias, "aliaseskeypass".toCharArray());
byte[] encodedKey = priv.getEncoded();
System.out.println(priv);
/* save the certificate in a file named "suecert" */
FileOutputStream keyfos = new FileOutputStream("suekey.der");
keyfos.write(encodedKey);
keyfos.close();
//You can extract the public key certificate from the keystore and save its encoded bytes to a file named suecert, via the following.
            java.security.cert.Certificate cert = ks.getCertificate(alias);
byte[] encodedCert = cert.getEncoded();
System.out.println(" Certificate : " + cert);
/* save the certificate in a file named "suecert" */
FileOutputStream certfos = new FileOutputStream("suecert.der");
certfos.write(encodedCert);
certfos.close();

ma mi restituisce quest'errore che non riesco a capire:

1
java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
    at com.sun.net.ssl.internal.ssl.PKCS12KeyStore.engineGetKey(Unknown Source)
    at java.security.KeyStore.getKey(Unknown Source)
    at Perform.key.main(key.java:32)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
    at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
    at com.sun.crypto.provider.SunJCE_ab.b(DashoA12275)
    at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(DashoA12275)
    at javax.crypto.Cipher.doFinal(DashoA12275)
    ... 3 more

sapete illuminarmi su quest'errore?
Grazie mille

PM Quote
Avatar
ermasto (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/06/2006

Segnala al moderatore
Postato alle 16:53
Giovedì, 08/06/2006
avevo fatto un errore io nel settare la password della chiave ora va bene quella parte per salvare la chiave privata?? se si che estensione ci devo dare??

poi un altra cosa il programma mi da un errore su questo metodo:
byte[] encodedCert = cert.getEncoded();
mi dice:
Exception in thread "main" java.lang.NullPointerException
    at Perform.key.main(key.java:43)

come mai mi restituisce quest'errore?
Grazie Mille

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 18:16
Giovedì, 08/06/2006
vuol dire che c'è un oggetto che viene usato senza venire inizializzato, in sostanza usi qualcosa che punta a null.
Probabilmente è cert l'istanza non inizializzata.

ciao

Ultima modifica effettuata da netarrow il 08/06/2006 alle 18:16
PM Quote
Avatar
ermasto (Normal User)
Newbie


Messaggi: 9
Iscritto: 06/06/2006

Segnala al moderatore
Postato alle 11:43
Sabato, 10/06/2006
ok ci sono riuscito avevo un errore nel codice e non me ne ero accorto.

ora un altro passo che devo fare è il seguente:

devo creare un messaggio soap e aggiungere ad esso un security token che è il certificato x509 e poi tutto questo messaggio soap lo devo firmare con la chiave privata che appartiene al certificato

Per quanto riguarda la creazione del messaggio soap non ci sono problemi ma non sono riuscito a trovare nulla su come aggiungere il token x509, ho letto in giro che devo usare wss4j ma non ho trovato una buona guida e cercare in tutte le API è uno sbattimento assurdo, che tu sappia esiste una guida o qualche sito che lo spiega meglio magari con qualche esempio??

Grazie

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo