Solución del Error PKIX Path Building Failed en Java


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

  1. 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.
  2. TrustStore Desactualizado: El almacén de certificados de Java (truststore) puede no contener el certificado raíz necesario para validar el certificado del servidor.
  3. 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:

  1. Obtener el Certificado: Utiliza un navegador o una herramienta como openssl para obtener el certificado del servidor.

    bash
    openssl s_client -connect example.com:443 -showcerts
  2. Agregar el Certificado al TrustStore:

    bash
    keytool -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:

  1. Crear un TrustStore Personalizado:

    bash
    keytool -import -alias exampleCert -keystore myTrustStore.jks -file path/to/certificate.crt
    • -keystore: Especifica el archivo del truststore personalizado.
  2. Configurar tu Aplicación para Usar el TrustStore Personalizado:

    bash
    java -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.


¿Le ha resultado útil este artículo?