2012-05-07 13 views
14

Sto cercando di ottenere un'applicazione in esecuzione su Tomcat 6 per connettersi a un server LDAP su SSL.Certificato importato nel keystore Java, JVM ignora il nuovo cert

ho importato il certificato del server di archivio chiavi utilizzando:

C:\Program Files\Java\jdk1.6.0_32\jre\lib\security>keytool -importcert -trustcacerts -file mycert -alias ca_alias -keystore "c:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts" 

quando inizio Tomcat con il debug SSL attivato, secondo i registri Tomcat utilizza il file certificato corretto:

trustStore is: C:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts 

Tuttavia , Tomcat non aggiunge il certificato appena importato - tutti gli altri certificati nel file cacerts vengono stampati nel registro e la connessione non riesce:

handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

Il riavvio di Tomcat non è di aiuto. Ho verificato con il comando keytool -list che il nuovo certificato esiste effettivamente sul file.

Perché Tomcat continua a ignorare il mio nuovo certificato?

EDIT:

sembra che il problema è stato causato da Windows 7 VirtualStore. Keytool ha creato una nuova copia del file cacert e Tomcat ha utilizzato il file originale.

+0

Il file 'mycert' contiene l'intera catena di certificati? Java vuole che l'intero percorso di fiducia sia nello store. – Romain

+0

Solo un semplice suggerimento, vai al tuo 'C: \ Users \ YourAccountName', ci saranno i nomi di file' .keystore', aprirlo e rimuovere quello precedente da quello, e poi fare di nuovo quello che hai fatto.Spero che risolverai le cose per te :-) –

+1

@Romain No, un certificato attendibile non ha nulla a che fare con la catena. Qualsiasi certificato importato come certificato attendibile viene considerato come un certificato radice affidabile. – emboss

risposta

4

Verificare se è presente una chiave con la stessa informazione CN ma un diverso alias.

Ho avuto problemi simili in precedenza quando ho provato a importare una versione più recente di un certificato, ma ho lasciato la versione precedente nel keystore. I miei programmi Java trovavano semplicemente la prima chiave CN corrispondente nel keystore (che era il vecchio scaduto) e cercavano di usarlo, anche se ce n'era uno nuovo che corrispondeva anche al CN.

Verificare inoltre che il certificato di autenticazione di root (e il certificato intermedio, se applicabile) esistano nel keystore. Se si esegue l'autenticazione con uno dei principali provider di sicurezza come Verisign o Globalsign, di solito vengono forniti i certificati root e intermedio. Se questi certificati esistono già nel keystore, assicurarsi che siano ancora validi. È necessario avere tutti i certificati dal proprio certificato personale fino in fondo alla catena di autenticazione fino alla radice, esistente nel keystore, in modo che comprenda come convalidare le proprie credenziali.

+0

Questo non sembra essere il problema, ma grazie per il suggerimento – tputkonen

+0

ho modificato la mia risposta. Hai controllato che il certificato di root per la tua autorità di certificazione esista nel keystore? – wattostudios

+1

Non è necessario aggiungere certificati sopra uno già presente nell'archivio conti. Qualsiasi certificato nel negozio è considerato attendibile senza ulteriore convalida. Ma buon consiglio con l'alias! – emboss

0

Quello che hai descritto è esattamente ciò che ho ottenuto usando e un utente regolare anche se membro del gruppo amministrativo su un server Windows. È necessario avviare cmd.exe in modalità amministrazione per applicare le modifiche ai file cacerts. Almeno sui sistemi operativi Win2k8.

Se non si fa questo, i prefissi mostreranno nello keytool.exe -list visualizzare i nuovi certificati ma Tomcat non li vedrà. Non sono sicuro del perché. Ma quando lo si aggiunge con cmd.exe avviato come amministratore, Tomcat funziona correttamente con i certificati appena aggiunti.

È inoltre possibile utilizzare Djavax.net.debug="ssl,handshake" per vedere cosa legge Tomcat dal file cacerts.

14

JVM deve essere riavviato dopo l'importazione di certificati nel keystore.

Problemi correlati