2012-05-07 23 views
14

Estoy tratando de obtener una aplicación que se ejecute sobre Tomcat 6 para conectarse a un servidor LDAP a través de SSL.Certificado importado al almacén de claves Java, JVM ignora el nuevo certificado

Importé certificado del servidor al keystore usando:

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" 

cuando comienzo Tomcat con la depuración de SSL activado, de acuerdo a los registros de Tomcat está utilizando el archivo de certificado correcto:

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

Sin embargo , Tomcat no agrega el certificado que acabo de importar, todos los demás certificados en el archivo de cacerts se imprimen en el registro y la conexión falla:

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 

Reiniciar Tomcat no ayuda. He verificado con el comando keytool -list que el nuevo certificado realmente existe en el archivo.

¿Por qué Tomcat sigue ignorando mi nuevo certificado?

EDIT:

parece que el problema se debía a Windows 7 VirtualStore. Keytool creó una nueva copia del archivo cacert y Tomcat usó el archivo original.

+0

¿El archivo 'mycert' contiene toda la cadena de certificados? Java quiere que toda la ruta de confianza esté en la tienda. – Romain

+0

Simplemente una sugerencia simple, ve a 'C: \ Users \ YourAccountName', un nombre de archivo' .keystore' estará allí, ábrelo y quita el anterior de eso, y luego haz lo que hiciste de nuevo.Afortunadamente eso resolverá las cosas para usted :-) –

+1

@Romain No, un certificado de confianza no tiene nada que ver con la cadena. Cualquier certificado importado como certificado confiable se trata como un certificado raíz de confianza. – emboss

Respuesta

4

Comprueba si hay una clave con la misma información de CN pero con un alias diferente.

He tenido problemas similares antes cuando traté de importar una versión más reciente de un certificado pero dejé la versión anterior en el almacén de claves. Mis programas Java simplemente encontrarían la primera clave CN coincidente en el almacén de claves (que era el antiguo vencido) e intentarían usar eso, aunque había uno más nuevo que también coincidía con el CN.

También asegúrese de que exista el certificado raíz de autenticación (y el certificado intermedio si corresponde) en el almacén de claves. Si se está autenticando contra uno de los principales proveedores de seguridad, como Verisign o Globalsign, generalmente le proporcionará los certificados raíz y los certificados intermedios. Si estos certificados ya existen en el almacén de claves, asegúrese de que todavía estén en vigencia. Debe tener todos los certificados de su certificado personal desde la cadena de autenticación hasta la raíz, que se encuentra en el almacén de claves, para que comprenda cómo validar sus credenciales.

+0

Eso no parece ser el problema, pero gracias por la sugerencia – tputkonen

+0

He editado mi respuesta. ¿Ha comprobado que el certificado raíz para su autoridad de certificación existe en el almacén de claves? – wattostudios

+1

No es necesario agregar certificados encima de uno que ya se encuentra en el almacén de confianza. Se confía en cualquier certificado en la tienda sin más validación. ¡Pero buenos consejos con el alias! – emboss

0

Lo que describió es exactamente lo que he estado recibiendo al usar cmd.exe y un usuario habitual aunque miembro del grupo administrativo en un servidor de Windows. Debe iniciar cmd.exe en modo de administración para aplicar los cambios en los archivos cacerts. Al menos en los sistemas operativos Win2k8.

Si no lo hace, las correcciones le mostrarán en el keytool.exe -list ver los certificados recién agregados, pero Tomcat no los verá. No estoy seguro de por qué. Pero cuando lo agrega con cmd.exe iniciado como Administrador Tomcat está bien con los certificados recién agregados.

También puede usar Djavax.net.debug="ssl,handshake" para ver lo que Tomcat lee del archivo cacerts.

14

JVM debe reiniciarse después de importar los certificados al almacén de claves.

Cuestiones relacionadas