ARCmop Java Programacion Solaris Linux

Java-linux-programacion

SSL ByPass en Java – PKIX path building failed – SunCertPathBuilderException

Posted by Cmop en agosto 21, 2013

Buenas tardes, en esta oportunidad, colocaré el código de una clase en java que nos permitirá librarnos de los problemas que se generan cuando intentamos utilizar llamadas a páginas web a través del protocolo HTTPS, bien pues en la anterior aplicación que coloqué aquí (entrada) , la cual sirve para consultar DNIs desde una aplicación de escritorio, utilizando el acceso web de la página de la RENIEC, antes de utilizar esta clase se obtenía el siguiente error:

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

Caused by: sun.security.validator.ValidatorException:
   PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
   unable to find valid certification path to requested target

Caused by: sun.security.provider.certpath.SunCertPathBuilderException:
   unable to find valid certification path to requested target

Después de dar vueltas por algunos sitios web, dicidí crear una clase que permitiera pasar por alto esta verificación de certificados.

package conectarWeb;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**
 *
 * @author Cmop
 */
public class SSLByPass {

    private static SSLByPass instancia;
    private SSLSocketFactory sslSocketFactory;

    public SSLByPass() throws NoSuchAlgorithmException, KeyManagementException {

        final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
                @Override
                public void checkClientTrusted(final X509Certificate[] chain, final String authType) {
                }

                @Override
                public void checkServerTrusted(final X509Certificate[] chain, final String authType) {
                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            }};

        final SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

        sslSocketFactory = sslContext.getSocketFactory();
    }

    public static SSLByPass getInstancia() throws NoSuchAlgorithmException, KeyManagementException {
        if (instancia == null) {
            instancia = new SSLByPass();
        }
        return instancia;
    }

    public SSLSocketFactory getSslSocketFactory() {
        return sslSocketFactory;
    }
}

Y su uso es completamente sencillo:

	URL url = new URL(urlseguridad);
	connection = (HttpsURLConnection) url.openConnection();
	connection.setSSLSocketFactory(SSLByPass.getInstancia().getSslSocketFactory());
	connection.setRequestMethod("POST");
	connection.setDoInput(true);  // Esto permite leer el contenido despues de la peticion
	connection.connect(); //Conectar
	connection.getContent(); //Obtener contenido

Saludos, espero les sea útil.

2 comentarios to “SSL ByPass en Java – PKIX path building failed – SunCertPathBuilderException”

  1. Carlos Sanchez said

    Excelente tu aporte … pero me sale este error
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    No se puede asignar la cookie java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

    Q prodra ser

  2. Amigo muy bueno tu aporte pero sigue saliendo error al consultar el DNI no extrae el captcha de la web reniec lo podrias arreglar por favor o darnos alguna pista en donde hay que corregir tal vez algun usuario lo haga de todas maneras gracias por compartir tu codigo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: