2010-02-10 29 views
6

Sto creando un programma client Java che invierà informazioni sensibili a un server Tomcat. Quindi ho bisogno di usare la connessione SSL in modo che le informazioni vengano crittografate.Connessione SSL dal client Java

Ho bisogno di utilizzare un certificato non autofirmato ma con problemi di connessione dal client java.

Ho configurato con successo Tomcat 5.5 per utilizzare SSL e testato tramite Firefox, che visualizza l'avviso del certificato autofirmato.

Ho seguito il 5.5 configurazione SSL Tomcat e hanno accennato per creare un archivio di chiavi:

keytool -genkey -alias tomcat -keyalg RSA

Poi ho fatto un export di quanto sopra:

keytool -export -keystore .keystore -alias tomcat -file localhost.cer

Poi ho fatto un'importazione del certificato sopra in macchina client:

keytool -import -alias tomcat -file localhost.cer -keystore "C:\Program Files"\Java\jdk1.6.0_17\jre\lib\security\cacerts"

Ma durante l'esecuzione del client ottengo:

Exception in thread "main" javax.net. ssl.SSLHandshakeException: sun.security.validator.ValidatorException: costruzione del percorso PKIX non riuscita: sun.security.provider.certpath.SunCertPathBuilderException: impossibile trovare il percorso di certificazione valido per il target richiesto

Questo è il codice del client:

URL url = new URL("https://localhost:8443"); 
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
conn.setSSLSocketFactory(sslsocketfactory); 
InputStream inputstream = conn.getInputStream(); 

Ora ho solo iniziato a giocare con questi certificati oggi e io sono nuovo di archivi di chiavi, quindi per favore siate pazienti.

Qualcuno può spiegare come esportare e importare il certificato creato in Tomcat sul computer client?

Grazie.

+1

Forse hai importato il certificato sbagliato o forse lo hai importato nel JRE sbagliato.Molte persone hanno più JRE sulle loro macchine. Dovresti elencare il contenuto dei cacerts e vedere se il tuo cert è lì dentro. Inoltre, è possibile impostare la proprietà di sistema java.net.debug = all per vedere quanti più dettagli sull'invio e sul controllo dei certificati. –

risposta

1

Atlassian ha buone istruzioni su come risolvere questo problema.

http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services

Un altro approccio è quello di installare validatori certificato meno che non perdona, ma che dovrebbe essere fatto solo come ultima risorsa.

+0

Il problema è che sembra che abbia fatto quei passi. –

+0

Se disattivo completamente la convalida della certificazione SSL, i dati inviati al server saranno ancora crittografati? Ho trovato un esempio che non convalida i certificati SSL ma voglio assicurarmi che la trasmissione dei dati sia ancora crittografata. – Marquinio

+1

Se si disattiva la convalida SSL, il tunnel SSL continuerà a esistere e i dati verranno comunque crittografati. ** MA ** non saprai più dove finisce quel tunnel! Un utente malintenzionato potrebbe fare qualcosa di simile per violare la sicurezza: avvelena il tuo DNS con un indirizzo IP arbitrario, genera un certificato SSL autofirmato per l'FQDN che stai collegando, ascolta SSL sull'indirizzo IP veleno e rispondi con un certificato SSL falso. Senza convalida il tuo client SSL si fiderà del certificato SSL del server, indipendentemente dalla CA da cui proviene. –

0

Utilizzare il contenitore Apache HTTP Cleint e seguire questo SSL Guide.

EasySSLProtocolSocketFactory può essere utilizzato per creare connessioni SSL che consentono al server di destinazione di autenticarsi con un certificato autofirmato.

+1

La persona contrassegnata come negativa può spiegare perché? Ho usato questa soluzione e funziona molto bene. –

0

Penso che dovresti inserire la password usando "changeit".

Problemi correlati