consumir webservices bajo https en java

19
La información fue tomada del siguiente enlace http://blog.rolandopalermo.com/2013/03/web-service-client-java-ssl- https.html 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: neolider1

Post on 06-Dec-2015

317 views

Category:

Documents


5 download

DESCRIPTION

servicios web y certificados digitales una copia de un buen enlace

TRANSCRIPT

Page 1: Consumir Webservices Bajo Https en Java

La información fue tomada del siguiente enlace http://blog.rolandopalermo.com/2013/03/web-

service-client-java-ssl-https.html

Consumir webservices bajo Https en JavaAutor : 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:

Page 2: Consumir Webservices Bajo Https en Java

Ahora hacemos clic en el candado verde y se desplegará un panel con dos pestañas.

Debemos posicionarnos en la pestaña Conexión como muestro a continuación:

Page 3: Consumir Webservices Bajo Https en Java

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

Page 4: Consumir Webservices Bajo Https en Java

En la ventana anterior debemos hacer clic en el botón Copiar en archivo... para importar el

certificado. Esto nos abrirá un asistente (el clásico siguiente-siguiente) tal como se muestra

en la imagen siguiente:

Page 6: Consumir Webservices Bajo Https en Java

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

Page 7: Consumir Webservices Bajo Https en Java

Ahora solo nos falta hacer clic en el botón finalizar de la siguiente ventana:

Page 8: Consumir Webservices Bajo Https en Java

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.

Page 9: Consumir Webservices Bajo Https en Java

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 instalación 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:

Page 11: Consumir Webservices Bajo Https en Java

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 continuación en imágenes:

Page 14: Consumir Webservices Bajo Https en Java

Creando el proyecto en   netbeans: Creamos una sencilla aplicación de escritorio y luego agregamos un nuevo cliente para

consumir el webservice.

Page 16: Consumir Webservices Bajo Https en Java

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

Page 17: Consumir Webservices Bajo Https en Java

Luego de eso, debemos agregar la siguiente clase que contiene el método main que nos

servirá para poder probar la aplicación.

?

1234567891011121314151617

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

Page 18: Consumir Webservices Bajo Https en Java

1819202122232425

        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 aplicación recibiendo una respuesta lo que nos indica que nuestra

aplicación ha funcionado correctamente.

Es muy imporatnte indicar que el método main deberá contener las siguientes líneas de

código lo cual le indicará a la aplicación en dónde se encuentra nuestro repositorio de

certificados.

?

1234

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

Espero que este artículo les sea de utilidad y cualquier pregunta no duden en comentarla.

Saludos y hasta una próxima oportunidad.

Y para los interesados, brindamos asesoría en el tema de facturación electrónica. El

temario del taller lo pueden descargar aquí: Temario del Taller.

Page 19: Consumir Webservices Bajo Https en Java

Controlar el tiempo de espera al consumir un webservice

Autor : Rolando Palermo Rodríguez Cruz on lunes, 2 de junio de 2014 | 6/02/2014

Durante los últimos días, 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 máximo en nuestra aplicación (Timeout). Para

aquellos quienes estén usando el JDK 1.6 este código 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.timeout", 5000);

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

Espero que este código les sea de utilidad y no se olviden de seguirnos a través de

nuestra página en Facebook.