1
respuesta

SSLHandshakeException

Hola, con la API al parecer tienen un problema con el certificado y no se puede consumir la API. Este es el error que me está devolviendo:

Hubo un ERROR: javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed

Se puede trabajar un workaround con esto? O qué otra alternativa sugieren?

Muchas gracias.

1 respuesta

¡Hola Edwin, espero que estés bien!

El error que estás experimentando, javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed, está relacionado con problemas de certificados al consumir una API. Una posible solución sería trabajar con un certificado personalizado o deshabilitar la validación SSL, aunque esta última opción no es recomendable en entornos de producción por motivos de seguridad.

Si estás utilizando Java para consumir la API, puedes configurar un trust manager personalizado para manejar la validación del certificado SSL. Aquí te dejo un ejemplo de cómo podrías hacerlo:

import javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

public class SSLConfig {

    public static void disableSSLValidation() {
        try {
            TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }

                        public void checkClientTrusted(X509Certificate[] certs, String authType) {
                        }

                        public void checkServerTrusted(X509Certificate[] certs, String authType) {
                        }
                    }
            };

            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            // Deshabilitar la validación del hostname
            HostnameVerifier allHostsValid = (hostname, session) -> true;
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (Exception e) {
            // Manejar la excepción
        }
    }
}

Luego, en tu código, antes de realizar la llamada a la API, puedes llamar al método disableSSLValidation() de la clase SSLConfig para deshabilitar la validación SSL.

Recuerda que esta solución es útil para entornos de desarrollo o pruebas, pero en producción es importante seguir las mejores prácticas de seguridad.

Espero que esta información te sea útil. ¡Mucho ánimo con tu proyecto! Si tienes alguna otra pregunta, no dudes en preguntar.

Espero haber ayudado y ¡buenos estudios!