Descripción del Problema
El error PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
ocurre en Java cuando el sistema no puede validar el certificado SSL/TLS del servidor al que intenta conectarse. Este problema surge cuando el certificado del servidor no está en el almacén de certificados de confianza (truststore
) de Java o cuando hay un problema con la cadena de certificación.
Causas Comunes
- Certificado del Servidor Inválido: El certificado del servidor puede no estar firmado por una autoridad de certificación (CA) confiable o puede haber problemas con la cadena de certificación.
- TrustStore Desactualizado: El almacén de certificados de Java (truststore) puede no contener el certificado raíz necesario para validar el certificado del servidor.
- Certificado Expirado o Revocado: El certificado del servidor puede estar expirado o revocado.
Soluciones
1. Actualizar el Certificado del Servidor
Verifica que el servidor tenga un certificado válido, emitido por una CA confiable. Asegúrate de que el certificado esté correctamente configurado en el servidor.
2. Actualizar el TrustStore de Java
Si el certificado del servidor no está en el truststore de Java, puedes agregarlo manualmente:
-
Obtener el Certificado: Utiliza un navegador o una herramienta como
openssl
para obtener el certificado del servidor.bashopenssl s_client -connect example.com:443 -showcerts
-
Agregar el Certificado al TrustStore:
bashkeytool -import -alias exampleCert -keystore $JAVA_HOME/jre/lib/security/cacerts -file path/to/certificate.crt
-alias
: Un nombre único para el certificado en el truststore.$JAVA_HOME
: Ruta a la instalación de Java.path/to/certificate.crt
: Ruta al archivo del certificado.
La contraseña por defecto del truststore suele ser
changeit
.
3. Configurar un TrustStore Personalizado
Si prefieres no modificar el truststore global de Java, puedes crear y usar un truststore personalizado:
-
Crear un TrustStore Personalizado:
bashkeytool -import -alias exampleCert -keystore myTrustStore.jks -file path/to/certificate.crt
-keystore
: Especifica el archivo del truststore personalizado.
-
Configurar tu Aplicación para Usar el TrustStore Personalizado:
bashjava -Djavax.net.ssl.trustStore=path/to/myTrustStore.jks -Djavax.net.ssl.trustStorePassword=yourpassword -jar yourapp.jar
4. Revisar y Actualizar Certificados en tu Entorno
Asegúrate de que el JDK/JRE y los certificados en el truststore de Java estén actualizados. A veces, los certificados raíz pueden haber cambiado o expirado.