Como consumir un Servicio WEB HTTPS con certificado SSL desde una Base de Datos Oracle.

#OracleACE

#OracleTIPSsv

#Raul Antonio Molina Alvarenga, 22/02/2024

La integración de sistemas es una parte crucial para el correcto funcionamiento de los mismos, los sistemas no son islas que no tienen comunicación con otros sistemas internos y/o externos en nuestras empresas.

Esta integracion puede hacerse con capas de software sofisticadas como un BUS de Servicios etc, pero tambien puede hacerse desde dentro de la poderosisima Oracle Database.

Cuando el consumo esta en HTTP no es problema alguno, pero pongamosle una variable HTTPS, la cosa cambio.

Para solventar dicho impase, necesitamos 3 cosas

1)Un WALLET

2)El certificado de sitio del webservice.

3)Un Procedimiento de prueba para validar el funcionamiento.

Anotados los pasos

Definir el sitio o servicio web a consumir, para el caso usaremos https://www.oracle.com

0) Descarga del certificado para el laboratorio

Dirigirse al sitio, usar chrome de preferencia

Validar la información del sitio seguro

Validar la información del certificado

Cambiarse a la pestaña detalles, seleccionar ROOT arriba y abajo

Click en exportar y guardar con este nombre sitecertify.crt

Trasladar al servidor de base de datos donde se usara.

1) Creacion de un folder que contendra el wallet

El wallet no es nada más que eso , una cartera para guardar identidades.

[oracle@~]$ mkdir -p /U01/app/oracle/admin/DB11G/wallet

2)Creacion del wallet con el tool orapki, existen mas tools para crear wallets, este está incluio varios productos Oracle.

[oracle@~]$ orapki wallet create -wallet /U01/app/oracle/admin/DB11G/wallet -pwd WalletPasswd123 -auto_login
Oracle PKI Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.

3) Importacion del certificado en base 64 (x509 ) del sitio web o del sitio que contiene el servicio en SSL
usualmente se puede obtener del navegador cargando el sitio web, o con wget o CURL en un unix/linux

[oracle@~]$ orapki wallet add -wallet /U01/app/oracle/admin/DB11G/wallet -trusted_cert -cert "/home/oracle/sitecertify.crt" -pwd WalletPasswd123
Oracle PKI Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.

los datos que se usaran dentro del plsql o bloque anonimo, ruta del wallet y password.

WALLET: /U01/app/oracle/admin/DB11G/wallet
PASS: WalletPasswd123

4)para validar su contenido:

orapki wallet display -wallet /U01/app/oracle/admin/DB11G/wallet
Requested Certificates:
User Certificates:
Trusted Certificates:
Subject: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US

5)y así la forma de invocarlo con un select sin bloque anonimo ni plsql.

SIN USAR EL WALLET:
SQL> select utl_http.request('https://www.oracle.com', null,NULL,NULL) from dual;
select utl_http.request('https://www.oracle.com', null,NULL,NULL) from dual
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1530
ORA-29024: Certificate validation failure
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1470
ORA-06512: at line 1

usando el wallet

SQL> SET SERVEROUTPUT ON
select utl_http.request('https://www.oracle.com', null,'file:/U01/app/oracle/admin/DB11G/wallet','WalletPasswd123') from dual;
SQL>

UTL_HTTP.REQUEST(‘HTTPS://WWW.ORACLE.COM’,NULL,’FILE:/U01/APP/ORACLE/ADMIN/DB11G

<meta name="page_type" content="Home"/>Oracle | Cloud Applications and Cloud Platform< /title><link rel="preconnect" href="https://tms.oracle.com/" crossorigin="anonym ous"/><link rel="preconnect" href="https://tags.tiqcdn.com/" crossorigin="anonym ous"/><link rel="preconnect" href="https://consent.trustarc.com" crossorigin="an onymous"/><link rel="preconnect" href="https://d.oracleinfinity.io" crossorigin= "anonymous"/><link rel="dns-prefetch" href="https://dc.oracleinfinity.io" crosso rigin="anonymous"/><link rel="dns-prefetch" href="https://oracle.112.2o7.net" cr ossorigin="anonymous"/><link rel="dns-prefetch" href="https://s.go-mpulse.net" c rossorigin="anonymous"/><link rel="dns-prefetch" href="https://c.go-mpulse.net" crossorigin="anonymous"/><link rel="preload" href="https://www.oracle.com/asset/<br /> web/fonts/oraclesansvf.woff2" as="font" crossorigin="anonymous" type="font/woff2</p> <h2>UTL_HTTP.REQUEST('HTTPS://WWW.ORACLE.COM',NULL,'FILE:/U01/APP/ORACLE/ADMIN/DB11G</h2> <p>"/><link rel="preload" href="https://www.oracle.com/asset/web/fonts/redwoodicons .woff2" as="font" crossorigin="anonymous" type="font/woff2"/><meta name="major_v ersion" content="3"/><meta name="minor_version" content="13"/><meta name="bug_ve</p>

Espero les sea de Utilidad

Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *