Certificados, Servicios Web y https

En alguna ocasión es posible que nos veamos en la necesidad de probar un servicio web bajo protocolo seguro. Lo normal, si es un servicio REST, es hacer una primera apoximación con alguno de los clientes que habituales: Postman o Rest Client, que se instalan como plugins o extensiones de chrome y/o firefox.
Probamos, conectamos y todo correcto. Escribes tu código, intentas repetir la llamada que te funcionó y obtienes un pete soberano: "sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target". El problema es que no has podido establecer la conexión con el servidor. Ya que no tienes "visible" para java un certificado que te permita conectarte.
La primera solución es ir al navegador y exportar el certificado del servidor para después importarlo en el almacen de certificados de java. Los navegadores nos hacen el trabajo engorroso de forma automática.
Nota: Si tienes un sistema Windows es  posible que te suene que hay tres almacenes de certificados, el que utiliza el sistema operativo, el que utiliza firefox y otro, más escondido, que es el que utiliza la máquina virtual de java. Que reside en un archivo llamado "cacerts". En mi caso en la ruta "C:\Archivos de programa\Java\jdk1.7.0_51\jre\lib\security\cacerts".
Aparte de utilizar la consola de la herramienta keytools, puede ser recomendable utilizar una herramienta como "Portecle" que nos hará el trabajo más fácil.
La segunda opción para la fase de desarrollo es más limpia y permite mayor control: crear nuestro propio almacen de certificados, instalar en él el certificado del servidor y cuando lancemos la aplicación de escritorio o despleguemos la aplicación web decirle donde está el almacen de certificados donde está el certificado del servidor al cual nos vamos a conectar por https.
Imaginemos que con Portecle hemos creado un almacen llamado "servicios3.jks" sobre "C:" y le hemos puesto la contraseña "servicios3".

Lo único que queda es pasarle a la máquina virtual estos parámetro para que lo utilice cuando necesite un certificado. Permitiéndonos tener un total control sobre los certificados visibles.

A modo de ejemplo. Desde el eclipse , para lanzar cualquier configuración vamos a la segunda pestaña  y le pasamos los parámetros a la MV:

-Djavax.net.ssl.trustStore="C:\servicios3.jks"
-Djavax.net.ssl.trustStorePassword=${servicios3}


Portecle es una herramienta razonablemente sencilla de manejar cuando se tienen unos conocimientos elementales de qué se está haciendo y para qué. En cualquiera de los casos su documentación es bastante clara.
Una conexión básica te la dejo en este snippet:
Añadir leyenda
Captura del eclipse    String myURL = "http://sinjava.blogspot.com";
           try {
           
URL myUrl = new URL(myURL);
            URLConnection con = myUrl.openConnection();
            BufferedReader br= new BufferedReader(new InputStreamReader(
                    con.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null)
                sb.append(line);
            input.close();
            System.out.println(sb.toString());
        } catch (Exception e) {
            System.out.println(e.getMessage());

        }
       
Si fuese un cliente de jersey sería exactamente igual. Auque posiblemente encapsule la excepción en otra.