Memanggil API HTTPS Endpoints dari Oracle DBMS – Wallet – Enkripsi Oracle PKI /OpenSSL – Cloud AWS
Assalamualaikum wbt,
Saya ingin berkongsi pengetahuan di dalam bagaimana Oracle DB memanggil sebarang API sama ada di dalam atau di luar premis organisasi. Secara amnya, proses ini tidak mudah dan oracle telah memastikan tahap keselamatan apabila berlaku capaian ke mana2 api . Untuk menjamin tahap keselamatan panggilan API, Oracle perlu memastikan wallet perlu dihasilkan terlebih dahulu berdasar sijil digital (*.cer) dari domain yang ingin di akses menggunakan Oracle PKI atau OpenSSL. Oracle XE tidak datang bersekali dengan Oracle PKI LIB iaitu hanya terdapat di Oracle Enterprise sahaha (berlesen). Jadi untuk menghasilkan wallet ia perlu menggunakan openssl.Seterusnya,api ini perlu melalui proses createacl dan assignacl untuk capaian link api tersebut. Jadi ada beberapa step yang perlu diikuti. Jadi untuk perkongsian ini saya mengguna instance Ubuntu 18.04 di AWS Cloud untuk pemasangan Oracle XE database dan wallet .
a) Pemasangan Oracle 12c Express Edition (XE)
1) Download xe db
oracle-xe-11.2.0-1.0.x86_64Z)
daripada https://www.oracle.com/database/technologies/xe-downloads.html. sebelum itu anda perlu mempunyai akaun oracle.com.
Jika download dari workstation dan anda perlu pindahkan files ini ke cloud aws.
2. Unzipkan files ini.
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
3. Pasang Alien (tukar format rpm (linux) ke Deb (ubuntu)
sudo apt-get install alien libaio1 unixodbc
4.Tukar rpm ke deb
sudo alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpm
5.edit files chkconfig
sudo pico /sbin/chkconfig
salin ini:
#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Ubuntu
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
& save. 6. tukar permission
sudo chmod 755 /sbin/chkconfig
6. set parameter kernel copy & paste
# Oracle 11g XE kernel parameters
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65000
kernel.sem=250 32000 100 128
kernel.shmmax=536870912
& save sahkan :
sudo cat /etc/sysctl.d/60-oracle.conf
load new kernal setting
sudo service procps start
verify parameter :
sudo sysctl -q fs.file-max
7. tetapan mount point
sudo vi /etc/rc2.d/S01shm_load
kopi & pes
#!/bin/sh
case "$1" in
start) mkdir /var/lock/subsys 2>/dev/null
touch /var/lock/subsys/listener
rm /dev/shm 2>/dev/null
mkdir /dev/shm 2>/dev/null
mount -t tmpfs shmfs -o size=2048m /dev/shm ;;
*) echo error
exit 1 ;;
esac
& tukar permission files
sudo chmod 755 /etc/rc2.d/S01shm_load
8. laksanakan command lain
sudo ln -s /usr/bin/awk /bin/awk
sudo mkdir /var/lock/subsys
sudo touch /var/lock/subsys/listener
& restart ubuntu VM
9. Memasang Oracle
sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb
konfigur :
sudo /etc/init.d/oracle-xe configure masukkan info yang diperlukan spt port no dsb 10. Tetapan persekitaran env variable sudo vi
~/.bashrc kopi & pes
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe export ORACLE_SID=XE export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh` export ORACLE_BASE=/u01/app/oracle export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$ORACLE_HOME/bin:$PATH
Load tetapan ini
. ~/.profile
11. restart servis Oracle
sudo service oracle-xe start
masukkan username ubuntu di dalam group dba
sudo usermod -a -G dba YOURUSERNAME
ok selesai proses pemasangan db
12. Memulakan servis Oracle
sudo service oracle-xe start
login :sqlplus sys as sysdba Cipta satu akaun:
create user USERNAME identified by PASSWORD;
alter database open resetlogs
Grant pada user tadi :grant connect, resource to USERNAME;
exit;
13. Mengakses menggunakan command shell:
sqlplus
13. Mengakses oracle XE yang dipasang di cloud aws dari client
- apa yang anda perlukan adalah Oracle sql developer yang dipasang di workstation client masing2.
masukkan
hostname : public ip instance cloud
port : 1521
sid : xe
username : akaun yang dicipta tadi
password : password akaun yang dicipta tadi
Nota : jika connection dari network organisasi,sila pastikan port 1521 diopen utk incoming trafic.
Jika port ini di blocked,connection ke oracle db dipsang di cloud akan gagal.
Untuk lebih selamat elok conenction menggunakan mobile data sendiri.
.
& tekan butang 'test', jika tiada masalah,status : success akan dipaparkan.
14. Tetapan akses api (https) dari Oracle
oracle akan call sebarang akses ke url melalui pakej
UTL_HTTP. Oracle tiada masalah untuk mengakses url http biasa (tidak secured). contoh
SQL> select UTL_HTTP.REQUEST('http://www.google.com') from dual;
berjaya di paparkan sebagai output.
UTL_HTTP.REQUEST('HTTP://WWW.GOOGLE.COM') -------------------------------------------------------------------------------- <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"><head><me ta content="Search the world's information, including webpages, images, videos a nd more. Google has many special features to help you find exactly what you're l ooking for." name="description"><meta content="noodp" name="robots"><meta itempr op="image" content="/images/google_favicon_128.png"><title>Google</title><script >(function(){ window.google={kEI:"X057UtKqGYvprQeorYDgAQ",getEI:function(a){for(var b;a&&(!a.g etAttribute||!(b=a.getAttribute("eid")));)a=a.parentNode;return b||google.kEI},h ttps:function(){return"https:"==window.location.protocol},kEXPI:"17259,146147,40 00116,4006293,4006727,4007231,4007661,4007714,4007830,4008067,4008133,4008142,40 08365,4008725,4009033,4009378,4009565,4009663,4009671,4010061,4010806,4010899,40 10938,4011063,4011107,4011125,4011228,40112 . . tetapi jika call menggunakan https select UTL_HTTP.REQUEST('https://www.google.com') from dual; 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 29273. 00000 - "HTTP request failed" *Cause: The UTL_HTTP package failed to execute the HTTP request. *Action: Use get_detailed_sqlerrm to check the detailed error message. Fix the error and retry the HTTP request. ** error akan dipaparkan spt ini disebabkan domain url ini tidak di accept oleh oracle melalui ia perlu diberi akses melalui wallet,create acl dan assigned acl. jadi untuk tujuan pengujian kita boleh guna certificate ssl dari oracle.com . cara nak dptkan cer dari mana website https spt ini .![]()
![]()
simpan jenis files ’ to ‘X.509 Certificate with chain (PEM)’.kita namakan file ini www.oracle.crt oleh kerana kita menggunakan oracle xe, maka ia tiada lib oraclepki.jadi kita menggunakan openssl untuk mencipta files wallet . seterusnya create 1 folder wallet atau nama2 lain /u01/app/oracle/wallet
[oracle@oraclexe ~]$ cd /u01/app/oracle/wallet [oracle@oraclexe wallet]$ openssl pkcs12 -export -in www.oracle.crt -out ewallet.p12 -nokeys Enter Export Password: Verifying - Enter Export Password: [oracle@oraclexe wallet]$ spt ini dan files wallet ewallet.p12 akan dibuat. ok selesai create wallet . anda perlu create acl dan assign acl pada domain ini. jadi lgin sysadmin dan execute command plsql ini. BEGIN DBMS_NETWORK_ACL_ADMIN.create_acl ( acl => 'api-prod.xml', description => 'call rest api endpoint for live', principal => 'CMSADMIN', is_grant => TRUE, privilege => 'connect', start_date => SYSTIMESTAMP, end_date => NULL); end; begin DBMS_NETWORK_ACL_ADMIN.assign_acl ( acl => 'api-prod.xml', host => '*', lower_port => 80, upper_port => NULL); end; ok done . . seterusnya login user biasa dan laksanakan plsql ini. **password = password yang kita create wallet tadi
QL> set pagesize 100 SQL> select UTL_HTTP.REQUEST('https://support.oracle.com',null,'file:/u01/app/oracle/wallet','password') Output from dual; OUTPUT -------------------------------------------------------------------------------- <HTML> <HEAD> <title>Oracle Configuration Support Manager</title> <meta http-equiv="REFRESH" content="0;url=/epmos/faces/MosIndex.jspx"></HEAD> <BODY> </BODY> </HTML> . Ok jika dilihat response dari sini adalah berjaya. website https tersebut telah memberi response. . ok pengujian di atas menggunakan oracle xe dan openssl untuk create wallet. Untuk persekitaran organisasi yang mempunyai lesen oracle database enterprise,anda boleh mengguna oracle pki lib. . step yang sama juga spti menggunakan oracle xe dan openssel. cuma berbeza command utk create wallet ok. . akses ke oracle enterprise server melalui terminal. buat folder terlebih dahulu
mkdir -p /u01/app/oracle/admin/DB11G/wallet seterusnya guna command oraclepki untuk create wallet
orapki wallet create -wallet /u01/app/oracle/admin/DB11G/wallet -pwd WalletPasswd123 -auto_login ok selesai create wallet. proses createacl dan assigned acl seperti biasa. test secured connection
SET SERVEROUTPUT ON EXEC UTL_HTTP.set_wallet('file:/u01/app/oracle/admin/DB11G/wallet', 'WalletPasswd123'); EXEC show_html_from_url('https://support.oracle.com'); ... HTML output ... PL/SQL procedure successfully completed. SQL> . . ok ini adalah contoh wallet yang digunakan di UMP untuk call api endppoint. **untuk persekitran di ump, langkah yg sama untuk dapat certificate (*.cer) untuk domain ump.(digicert) select utl_http.request('https://xx.xx.xx.my/xxxx.php',null,'file:/u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_1/owm/wallets/oracle','xxxxx') from dual; . file:/u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_1/owm/wallets/oracle (wallet path) . NOTA: setting ini ada mudah untuk single machine tetapi utk persekitaran HA (2) dan DR(1) ia perlu dibuat untuk keseluruhan vm. yes berjaya. SELAMAT MENCUBA TQ
Recent Comments