Está en la página 1de 19

La informacin fue tomada del siguiente enlace http://blog.rolandopalermo.com/2013/03/webservice-client-java-ssl-https.

html

Consumir webservices bajo Https en Java


Autor : Rolando Palermo Rodrguez 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 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 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 direccin url del wsdl. 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 al wsdl mediante
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 pestaa Conexin como muestro a continuacin:

Ahora hacemos clic en Datos del certificado y se abrir la siguiente ventana:

En la ventana anterior debemos hacer clic en el botn Copiar 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 en Siguiente> y vamos a la siguiente imagen:

Seleccionamos X.509 codificado base 64 (.CER) y hacemos clic en Siguiente>. 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
en Siguiente>.

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\bin tal 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 -alias CA_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 primero que 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 un si.

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

Creando el proyecto en netbeans:


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.
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

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.getRece
return port.validarComprobante(xml);
}

public static void main(String[] args) {


System.setProperty("javax.net.ssl.keyStore", "C:\Program Files (x86)\Jav
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

18
19
20
21
22
23
24
25

System.setProperty("javax.net.ssl.trustStore", "C:\Program Files (x86)\J


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.

Es muy imporatnte indicar que el mtodo main deber contener las siguientes lneas de
cdigo lo cual le indicar a la aplicacin en dnde se encuentra nuestro repositorio de
certificados.
?

1
2
3
4

System.setProperty("javax.net.ssl.keyStore", "C:\Program Files (x86)\Java\jdk1.6.


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");

Espero que este artculo les sea de utilidad y cualquier pregunta no duden en comentarla.
Saludos y hasta una prxima oportunidad.
Y para los interesados, brindamos asesora en el tema de facturacin electrnica. El
temario del taller lo pueden descargar aqu: Temario del Taller.

Controlar el tiempo de espera al consumir un


webservice
Autor : Rolando Palermo Rodrguez Cruz on lunes, 2 de junio de 2014 | 6/02/2014

Durante los ltimos das, al consumir los Webservice del SRI hemos podido notar que
muchas veces se queda en espera sin retornar el objeto de respuesta. Es por eso que es
importante controlar el tiempo de espera mximo en nuestra aplicacin (Timeout). Para
aquellos quienes estn usando el JDK 1.6 este cdigo les servir para poder establecer un
mecanismo de control:
?

1
2
3

port = service.getRecepcionComprobantesPort();

((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.connect
5000);

((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.request
5000);

Espero que este cdigo les sea de utilidad y no se olviden de seguirnos a travs de
nuestra pgina en Facebook.