Pensando que abordaría el mismo problema que otras personas, he estado pasando por numerosos problemas similares y posibles soluciones, pero sin suerte.SSL de Java - InstallCert reconoce el certificado, pero sigue siendo un error "no se puede encontrar la ruta de certificación válida"?
El almacén de confianza que estoy utilizando es cacerts, ubicado en lib/security de un Java 1.6.0 JRE (compilación 1.6.0_20-b02 ... ¿podría ser esta la raíz del problema?). También he intentado con jssecacerts.
Usando InstallCert (por otros problemas similares publicados), puedo ver que mi certificado de hecho está instalado y es válido (y lo he eliminado, vuelto a importar, etc. para asegurarme de que estoy viendo los datos correctos) :
java InstallCert <my host name>
Loading KeyStore jssecacerts...
Opening connection to <my host name>:443...
Starting SSL handshake...
No errors, certificate is already trusted
el registro herramienta de claves y Portecle, volver a importar el CERT (he intentado generar a partir de openssl con -showcert, la exportación de los navegadores y scp'ing la vuelta, etc) me da "que ya existe en virtud de este otro alias aquí "tipo de mensaje. Por lo tanto, no parece haber ningún problema con la forma en que el certificado ingresa a la (s) herramienta (s).
Obligar a la confianza explícita Guardar las rutas en el código no hace ninguna diferencia, y en todos los casos lo que termino viendo cuando activo la depuración (a través de setProperty de javax.net.debug a "todos") es:
main, SEND TLSv1 ALERT: fatal, description = certificate_unknown
main, WRITE: TLSv1 Alert, length = 2 [Raw write]: length = 7 0000: 15
03 01 00 02 02 2E ....... main, called
closeSocket() main, 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
por desgracia, no puede permitir que anulando la comprobación mediante la implementación de mi propia TrustManager - tiene que comprobar realmente.
El certificado que recibo del host tiene varias extensiones (9, para ser exactos), lo que me hace preguntarme si de alguna manera son parte de este problema.
¿Qué más puedo verificar/probar? Cambiar a una versión diferente de JRE?
¿Por qué no puede implementar su propio 'TrustManager'? Todavía puede usar los certificados en su administrador de confianza y realizar el control. –
@Vivin - El problema principal que estoy tratando de resolver está dentro de una capa de aplicación que no controlo directamente (en este caso, una aplicación Grails que llama a algunos servicios web que recientemente se han convertido en HTTPS solamente), así que mientras yo podía usarla en mi propio escenario local, no puedo aplicar su uso en sentido ascendente. Lo cual es un problema, pero lo abordaré más adelante, por ahora, si puedo hacerlo funcionar al nivel más detallado, al menos me dice a dónde ir a continuación en la cadena de resolución. – Bill
¿Está ejecutando esto en un servidor de aplicaciones como GlassFish? Puede verificar si el proceso está ejecutando el binario de Java en /usr/lib/jvm/java-1.6.0-sun-1.6.0.20.x86_64 y no en otro binario de Java que no le gusta su trustStore (OpenJDK, etc.) La salida de depuración que publicó es útil, ¿puede publicar más? – Brad