Noticias

Consumir servicios web bajo https y/o autenticación

¿Cómo consumir un servicio web bajo https?, ¿cómo consumir un servicio con autenticación?, ¿son procesos complicados?

La movida de los GXtips sigue su curso. Consejos claros y prácticos que nos simplifican las tareas a la hora de trabajar. En esta oportunidad, Gonzalo Cuiñas, integrante del Equipo de Soporte de Artech, nos explica cuáles son los pasos necesarios para consumir un servicio web bajo autenticación. 

Consumir un servicio web bajo https o autenticación puede parecer algo complicado cuando en realidad no lo es. Básicamente el consumir un web service bajo https implica 3 pasos fundamentales:

• Consumir el wsdl que se encuentra bajo https
• Guardar el certificado del servidor en un keystore
• Consumir el web service indicándole a la aplicación dónde está el keystore con el certificado.

Consumiendo el wsdl

En el caso de servicios bajo https, es necesario obtener el wsdl como archivo para luego inspeccionarlo con el WSDL Inspector de manera local usando el protocolo file. Una manera de obtener el wsdl puede ser accediendo al mismo mediante el browser para luego hacer un “Save as” de la página. Una vez inspeccionado el servicio ya se puede programar el consumidor del web service como se hace comúnmente. La única salvedad es que será necesario crear una variable del tipo Location para indicar que el web service está bajo https, por ejemplo:

&location = getlocation("org_tempuriaction__wssuma")
&location.port = 8443
&location.secure = 1
&suma = &ws.execute(5, 3)

Guardando el certificado del servidor en un keystore

Es necesario esclarecer que para poder comunicarse con un recurso bajo https es necesario tener instalado el certificado del servidor con el cual nos queremos comunicar. Este certificado contiene (entre otras cosas) la clave pública con la cual se encripta la información que se envía y que solo el servidor sabe desencriptar con su clave privada (más información aquí). Por lo tanto, a la hora de consumir un servicio bajo https necesitaremos el certificado del servidor para poder establecer la comunicación.

Una vez que obtenemos el certificado debemos guardarlo en un keystore, que básicamente es un “almacén de certificados” que nos permite agregar nuevos certificados o eliminarlos (entre otras cosas). Una manera de manipular/administrar estos keystores es mediante la herramienta “Keytool.exe” que trae el JDK.

Indicando la ubicación del keystore en la aplicación java

A partir de ahora queda indicarle a la aplicación la ubicación del keystore para que al momento de establecer la comunicación sepa de dónde tomar el certificado. Para esto se deben configurar las “system properties”: javax.net.ssl.trustStore y  javax.net.ssl.trustStorePassword. Algo que se hace comúnmente es agregar dichas propiedades en la instancia de la máquina virtual lo cual se puede hacer en las Interpreter Options de GX.

En caso contrario se pueden configurar por código agregando las siguientes líneas en la rutina que consume el servicio (o en cualquier otra parte de la aplicación que se ejecute antes de consumir el servicio):

java System.setProperty("javax.net.ssl.trustStore", "C:\MiKeystore");
java System.setProperty("javax.net.ssl.trustStorePassword", "MiPassword");

Para poder leer el documento completo, en donde se incluye cómo trabajar con web services con autenticación, haga clic aquí.