Conexión HTTPS con UHTTP

Post Reply
sromero
Posts: 13
Joined: 07 Jan 2015, 10:42

Conexión HTTPS con UHTTP

Post by sromero »

Buenos días.

Estamos implementando el consumo de servicios web de terceros en nuestra aplicación y ahora han habilitado seguridad SSL en uno de los mismos.

En este caso solo aplica verificación de servidor. Es decir, tan solo hay que verificar que el certificado que devuelve la URL es de confianza en el host.

El caso es que hemos seguido las instrucciones de la documentación de modo que:

Hemos descargado el fichero ca-bundle.crt en base a los certificados de raíz de confianza desde Chrome o internet explorer.
Hemos editado este fichero para añadirle el certificado del servidor que ofrece el servicio web.
Hemos copiado el fichero en la carpeta USYS del cliente uniface.

Al realizar la llamada UHTTP. SEND a la URL del servicio web nos devuelve un bonito $STATUS = 0

Revisamos la documentación y se supone que SEND nunca puede devolver 0.

Con gran pena y dolor, pasamos a utilizar el parametro SET_FLAGS para obviar la negociación del certificado y tenemos idéntico resultado.

¿Que me pierdo? ¿Algo de proxys, puertos, meigas?

Slds.
luis.vila
Posts: 194
Joined: 17 Sep 2011, 12:46

Re: Conexión HTTPS con UHTTP

Post by luis.vila »

Por mi parte, siempre pruebo antes con el curl que tiene bastantes opciones y, sobre todo, tiene un parámetro -verbose que me ayuda mucho.
Hasta donde llega mi conocimiento, UHTTP no implementa todas las opciones del curl. Un curl --help muestra como 150 parámetros. Uniface 9.7 posibilita, por fin, el envío y recepción de binarios.

Entiendo que el proxy no será por lo que comentas que ya estabais usando el webservice pero ahora han exigido SSL.

Seguro que lo habéis visto, el campo username (y password) admite una lista de usuarios indicando además el tipo de autentificación.


UHTTP usa internamente curl (en windows: libcurl.dll, libeay32.dll, ssleay32.dll) pero no incluye el ejecutable (curl.exe). En alguna instalación me he visto obligado a dejar el ejecutable en la carpeta bin de Uniface para poder acceder a algunos webservices pejigueros (tanto que con mis -verbose ayudé a los dueños del webservice a descubrir que los métodos DELETE eran eliminados por un servidor previo al de los webservices, o a enterarme de que el servidor de pruebas estaba en la máquina de una persona que se había ido 15 días de vacaciones y, claro, la había apagado).

Por línea de comandos es sencillo ver qué está pasando: desde que el webservice realmente no funciona hasta que el UHTTP no puede gestionar los requisitos de seguridad. Por ejemplo, puede ser necesario incluir un certificado del cliente con cada llamada.

Si no es posible que el UHTTP pueda hacer la llamada, no queda otro remedio que implementar un servicio alternativo (os lo puedo pasar sin inconveniente) que use el servicio del sistema operativo para llamar al curl por línea de comandos.

$status=0 ; se acabaron los problemas
sromero
Posts: 13
Joined: 07 Jan 2015, 10:42

Re: Conexión HTTPS con UHTTP

Post by sromero »

Hola Luís,

También he hablado con la gente de Uniface.info y me han dicho que con la versión de Uniface con la que trabajamos y en entornos Windows, mediante UHTTP no se utiliza CURL sino WINAPI para validar el certificado.

Asi que tendremos que tirar de sistemas para que mediante directorio activo hagan lo que sea necesario para que el certificado de servidor sea de confianza y tal a nivel de registro y todo eso.

Por lo visto, ese tratamiento, si lo han homogeneizado a partir de la versión 9.7 en cuyo caso ya se usa CURL siempre.

Adicionalmente existe un bug que hace que el status de la llamada al servicio sea 0, falle o no, cosa que según la documentación es imposible. Esto te descoloca aún mas.

Por si te interesa te dejo la entrada en el foro donde me responden:
http://unifaceinfo.com/forum/uniface9/r ... /#p6050824

Me apunto igualmente el uso de curl para probar llamadas a WS por si un dia migramos a esa versión de uniface.

Lo del servicio alternativo si puedes pasarlo pues puede que nos sirva de ayuda aunque sea temporalmente, aunque el cliente no es muy amigo de estas cosas y al final tiene pinta de que lo harán por java/visul/loquesea implementando la signature y tal.

Gracias.
Post Reply