consumir webservices bajo https en java

18
Consumir webservices bajo Https en Java Autor : Rolando Palermo Rodríguez Cruz on martes, 26 de marzo de 2013 | 3/26/2013 Usualmente cuando desarrollamos aplicaciones en Java que van a hacer uso de recursos seguros (como en este caso, consumir webservices a través de un canal cifrado), debemos asegurarnos de tener instalados los certificados digitales necesarios puesto que al ser Java un lenguaje multiplataforma, no utiliza los certificados alojados en el sistema operativo [1]. Es por esa razón que decidí escribir este artículo dedicado a este tema. Los pasos para realizar esto los voy a detallar a lo largo de este post, en donde así mismo mostraré un ejemplo práctico. Bueno... ¡manos a la obra! Descargando el certificado digital: El Keysotre o JKS (Java Key Store) es un repositorio de certificados de seguridad, certificados de autorización o certificados de clave pública, utilizados por ejemplo en el cifrado SSL. Usualmente el JDK contiene un almacén de claves de certificados de autorización (CA) en la ruta jre/lib/security/cacerts. Así mismo el JDK provee una herramienta llamada keytool para manipual el keystore. Para importar un certificado a nuestro keystore, lo primero que debemos hacer es descargar dicho certificado desde la dirección url del wsdl. En este caso les mostraré cómo se hace utilizando el navegador Google Chrome por ser uno de los más populares (Y espero que no me condenen por lo último dicho). Bueno, accedemos al wsdl mediante la url tal como se muestra en la siguiente imagen:

Upload: alex

Post on 18-Dec-2015

12 views

Category:

Documents


2 download

DESCRIPTION

SSL Java

TRANSCRIPT

Consumir webservices bajo Https en JavaAutor : Rolando Palermo Rodrguez Cruz on martes, 26 de marzo de 2013 | 3/26/2013Usualmente cuando desarrollamos aplicaciones en Java que van a hacer uso de recursos seguros (como en este caso, consumir webservices a travs de un canal cifrado), debemos asegurarnos de tener instalados los certificados digitales necesarios puesto que al ser Java un lenguaje multiplataforma, no utiliza los certificados alojados en el sistema operativo[1]. Es por esa razn que decid escribir este artculo dedicado a este tema. Los pasos para realizar esto los voy a detallar a lo largo de este post, en donde as mismo mostrar un ejemplo prctico. Bueno... manos a la obra!

Descargando el certificado digital:El Keysotre o JKS (Java Key Store) es un repositorio de certificados de seguridad, certificados de autorizacin o certificados de clave pblica, utilizados por ejemplo en el cifrado SSL. Usualmente el JDK contiene un almacn de claves de certificados de autorizacin (CA) en la rutajre/lib/security/cacerts. As mismo el JDK provee una herramienta llamada keytool para manipual el keystore.Para importar un certificado a nuestro keystore, lo primero que debemos hacer es descargar dicho certificado desde la direccin url delwsdl. En este caso les mostrar cmo se hace utilizando el navegador Google Chrome por ser uno de los ms populares (Y espero que no me condenen por lo ltimo dicho). Bueno, accedemos alwsdlmediante la url tal como se muestra en la siguiente imagen:

Ahora hacemos clic en el candado verde y se desplegar un panel con dos pestaas. Debemos posicionarnos en la pestaaConexincomo muestro a continuacin:

Ahora hacemos clic enDatos del certificadoy se abrir la siguiente ventana:

En la ventana anterior debemos hacer clic en el botnCopiar en archivo...para importar el certificado. Esto nos abrir un asistente (el clsico siguiente-siguiente) tal como se muestra en la imagen siguiente:

Hacemos clic enSiguiente>y vamos a la siguiente imagen:

Seleccionamos X.509 codificado base 64 (.CER) y hacemos clic enSiguiente>. Ahora toca seleccionar la ruta donde queremos guardar nuestro certificado, en el caso de la imagen he seleccionado el escritorio. Elegimos la carpeta que gustemos y hacemos clic enSiguiente>.

Ahora solo nos falta hacer clic en el botn finalizar de la siguiente ventana:

Con esto ya tenemos el certificado, ahora solo hace falta importarlo a nuestro keystore, para lo cual haremos uso del keytool.

Importando el certificado digital a nuestro keystore:Para importa el certificado digital descargado a nuestro keystore vamos a usar el keytool (del cual ya les coment al principio de este post) que se encuentra ubicado en:..\Java\jdk1.6.0_23\jre\bintal como se muestra en la siguiente imagen.

Lo que debemos hacer es llamar a la herramienta keytool.exe desde una consola, con el siguiente comando:

keytool -import -keystore "C:\Archivos de programa\Java\jre1.6.0_05\lib\security\cacerts" -filec:\NuevaEntidadCertificadora.cer-aliasCA_SRI-storepass changeit

En donde las partes de color azul son valores relativos de: nuestra instalacin de java, la ruta en donde descargamos nuestro certificado y el alias que le asignaremos y que debe ser nico.Lo primeroque debemos recordar es que debemos ejecutar la consola de windows como administrador ya que vamos a sobreecribir un archivo en una carpeta con privilegios especiales. Para hacer esto debemos ejecutar la consola tal como se muestra en la siguiente imagen:

Luego ejecutamos el comando que se mencion anteriormente:

E indicamos que confiamos en el certificado que vamos a agregar con unsi.

Descargando el wisdel:Ahorasolo resta descargar el wsdl, para lo cual ejecutamos los tres sencillos pasos que detallo a continuacin en imgenes:

Creando el proyecto ennetbeans:Creamos una sencilla aplicacin de escritorio y luego agregamos un nuevo cliente para consumir el webservice.

Seleccionamos el wisdel que hemos descargado anteriormente.

Y con eso nos deber generar una estructura similar a la mostrada en la siguiente imagen:

Luego de eso, debemos agregar la siguiente clase que contiene el mtodo main que nos servir para poder probar la aplicacin.package com.rolandopalermo.ejemplos.test;import com.rolandopalermo.ejemplos.RespuestaSolicitud;/**** @author Rolando*/public class Main {private static RespuestaSolicitud validarComprobante(byte[] xml) {com.rolandopalermo.ejemplos.RecepcionComprobantesService service = new com.rolandopalermo.ejemplos.RecepcionComprobantesService();com.rolandopalermo.ejemplos.RecepcionComprobantes port = service.getRecepcionComprobantesPort();return port.validarComprobante(xml);}public static void main(String[] args) {System.setProperty("javax.net.ssl.keyStore", "C:\Program Files (x86)\Java\jdk1.6.0_23\jre\lib\security\cacerts");System.setProperty("javax.net.ssl.keyStorePassword", "changeit");System.setProperty("javax.net.ssl.trustStore", "C:\Program Files (x86)\Java\jdk1.6.0_23\jre\lib\security\cacerts");System.setProperty("javax.net.ssl.trustStorePassword", "changeit");RespuestaSolicitud respuesta = validarComprobante(null);System.out.println(respuesta.getEstado());}}

Y con eso ejecutamos la aplicacin recibiendo una respuesta lo que nos indica que nuestra aplicacin ha funcionado correctamente