Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengonfigurasi akses UTL_HTTP menggunakan sertifikat dan dompet Oracle
Amazon RDS mendukung akses jaringan keluar pada instans DB RDS for Oracle Anda. Untuk menghubungkan instans DB ke jaringan, Anda dapat menggunakan paket PL/SQL berikut:
UTL_HTTP
-
Paket ini membuat panggilan HTTP dari SQL dan PL/SQL. Anda dapat menggunakannya untuk mengakses data di Internet melalui HTTP. Untuk informasi lebih lanjut, lihat UTL_HTTP
dalam dokumentasi Oracle. UTL_TCP
-
Paket ini menyediakan fungsi akses sisi klien TCP/IP di PL/SQL. Paket ini berguna untuk aplikasi PL/SQL yang menggunakan protokol Internet dan email. Untuk informasi lebih lanjut, lihat UTL_TCP
dalam dokumentasi Oracle. UTL_SMTP
-
Paket ini menyediakan antarmuka untuk perintah SMTP yang memungkinkan klien mengirim email ke server SMTP. Untuk informasi lebih lanjut, lihat UTL_SMTP
dalam dokumentasi Oracle.
Dengan menyelesaikan tugas-tugas berikut, Anda dapat mengonfigurasi UTL_HTTP.REQUEST
agar bisa berfungsi dengan situs web yang memerlukan sertifikat autentikasi klien selama SSL handshake. Anda juga dapat mengonfigurasi autentikasi kata sandi untuk akses UTL_HTTP
ke situs web dengan memodifikasi perintah pembuatan dompet Oracle dan prosedur DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE
. Untuk informasi selengkapnya, lihat DBMS_NETWORK_ACL_ADMIN
catatan
Anda dapat mengadaptasi tugas berikut untuk UTL_SMTP
, yang memungkinkan Anda mengirim email melalui SSL/TLS (termasuk Amazon Simple Email Service
Topik
- Pertimbangan saat mengonfigurasi akses UTL_HTTP
- Langkah 1: Mendapatkan sertifikat root untuk situs web
- Langkah 2: Buat dompet Oracle
- Langkah 3: Unduh dompet Oracle Anda ke RDS Anda untuk instans Oracle
- Langkah 4: Berikan izin pengguna untuk dompet Oracle
- Langkah 5: Konfigurasikan akses ke situs web dari instans DB Anda
- Langkah 6: Uji koneksi dari instans DB Anda ke situs web
Pertimbangan saat mengonfigurasi akses UTL_HTTP
Sebelum mengonfigurasi akses, pertimbangkan hal berikut:
-
Anda dapat menggunakan SMTP dengan opsi UTL_MAIL. Untuk informasi selengkapnya, lihat Oracle _ UTL MAIL.
-
Nama Domain Name Server (DNS) dari host jarak jauh dapat berupa:
-
Dapat diatasi secara publik.
-
Titik akhir instans DB Amazon RDS.
-
Dapat diatasi melalui server DNS kustom. Untuk informasi selengkapnya, lihat Menyiapkan DNS server khusus.
-
Nama DNS privat dari instans Amazon EC2 dalam VPC yang sama atau VPC tersambung. Dalam hal ini, pastikan bahwa nama dapat diatasi melalui server DNS kustom. Sebagai alternatif, untuk menggunakan DNS yang disediakan oleh Amazon, Anda dapat mengaktifkan atribut
enableDnsSupport
dalam pengaturan VPC dan mengaktifkan dukungan resolusi DNS untuk koneksi peering VPC. Untuk informasi lebih lanjut, lihat Dukungan DNS dalam VPC Anda dan Memodifikasi koneksi peering VPC Anda. -
Untuk terkoneksi dengan aman ke sumber daya SSL/TLS jarak jauh, kami sarankan Anda membuat dan mengunggah dompet Oracle kustom. Dengan menggunakan integrasi Amazon S3 dengan fitur Amazon RDS for Oracle, Anda dapat mengunduh dompet dari Amazon S3 ke instans DB Oracle. Untuk informasi tentang integrasi Amazon S3 untuk Oracle, lihat Integrasi Amazon S3.
-
-
Anda dapat membuat tautan basis data antara instans DB Oracle melalui titik akhir SSL/TLS jika opsi Oracle SSL dikonfigurasi untuk setiap instans. Tidak diperlukan konfigurasi lebih lanjut. Untuk informasi selengkapnya, lihat Lapisan Soket Aman Oracle.
Langkah 1: Mendapatkan sertifikat root untuk situs web
Agar instans DB RDS for Oracle dapat membuat koneksi aman ke situs web, tambahkan sertifikat root CA. Amazon RDS menggunakan sertifikat root untuk menandatangani sertifikat situs web ke dompet Oracle.
Anda bisa mendapatkan sertifikat root dengan berbagai cara. Misalnya, Anda dapat melakukan hal berikut:
-
Gunakan server web untuk mengunjungi situs web yang diamankan oleh sertifikat tersebut.
-
Unduh sertifikat root yang digunakan untuk penandatanganan.
Untuk layanan AWS, sertifikat root biasanya berada di Repositori layanan kepercayaan Amazon
Langkah 2: Buat dompet Oracle
Buat dompet Oracle yang berisi sertifikat server web dan sertifikat autentikasi klien. Instans RDS Oracle menggunakan sertifikat server web untuk membuat koneksi aman ke situs web. Situs web tersebut membutuhkan sertifikat klien untuk mengautentikasi pengguna basis data Oracle.
Anda sebaiknya mengonfigurasi koneksi aman tanpa menggunakan sertifikat klien untuk autentikasi. Dalam kasus ini, Anda dapat melewati langkah-langkah keystore Java dalam prosedur berikut.
Untuk membuat dompet Oracle
-
Tempatkan sertifikat root dan klien dalam satu direktori, dan kemudian ubah ke direktori ini.
-
Ubah sertifikat klien.p12 ke keystore Java.
catatan
Jika Anda tidak menggunakan sertifikat klien untuk autentikasi, Anda dapat melewati langkah ini.
Contoh berikut mengonversi sertifikat klien bernama
client_certificate.p12
menjadi keystore Java bernamaclient_keystore.jks
. Keystore tersebut kemudian disertakan dalam dompet Oracle. Kata sandi keystore adalahP12PASSWORD
.orapki wallet pkcs12_to_jks -wallet ./
client_certificate.p12
-jksKeyStoreLoc ./client_keystore.jks
-jksKeyStorepwdP12PASSWORD
-
Buat direktori untuk dompet Oracle Anda yang berbeda dari direktori sertifikat.
Contoh berikut membuat direktori
/tmp/wallet
.mkdir -p
/tmp/wallet
-
Buat dompet Oracle di direktori dompet Anda.
Contoh berikut menetapkan kata sandi dompet Oracle menjadi
P12PASSWORD
, yaitu kata sandi yang juga digunakan oleh keystore Java pada langkah sebelumnya. Penggunaan kata sandi yang sama memang memudahkan, tetapi tidak wajib. Parameter-auto_login
mengaktifkan fitur masuk otomatis, sehingga Anda tidak perlu menentukan kata sandi setiap kali Anda ingin mengaksesnya.catatan
Tetapkan kata sandi selain perintah yang ditampilkan di sini sebagai praktik terbaik keamanan.
orapki wallet create -wallet
/tmp/wallet
-pwdP12PASSWORD
-auto_login -
Tambahkan keystore Java ke dompet Oracle Anda.
catatan
Jika Anda tidak menggunakan sertifikat klien untuk autentikasi, Anda dapat melewati langkah ini.
Contoh berikut menambahkan keystore
client_keystore.jks
ke dompet Oracle bernama/tmp/wallet
. Dalam contoh ini, Anda menentukan kata sandi yang sama untuk keystore Java dan dompet Oracle.orapki wallet jks_to_pkcs12 -wallet
/tmp/wallet
-pwdP12PASSWORD
-keystore ./client_keystore.jks
-jkspwdP12PASSWORD
-
Tambahkan sertifikat root untuk situs web target Anda ke dompet Oracle.
Contoh berikut menambahkan sertifikat bernama
Root_CA.cer
.orapki wallet add -wallet
/tmp/wallet
-trusted_cert -cert ./Root_CA.cer
-pwdP12PASSWORD
-
Tambahkan sertifikat perantara apa pun.
Contoh berikut menambahkan sertifikat bernama
Intermediate.cer
. Ulangi langkah ini seperlunya untuk memuat semua sertifikat perantara.orapki wallet add -wallet
/tmp/wallet
-trusted_cert -cert ./Intermediate.cer
-pwdP12PASSWORD
-
Konfirmasikan bahwa dompet Oracle Anda yang baru dibuat memiliki sertifikat yang diperlukan.
orapki wallet display -wallet
/tmp/wallet
-pwdP12PASSWORD
Langkah 3: Unduh dompet Oracle Anda ke RDS Anda untuk instans Oracle
Pada langkah ini, Anda mengunggah dompet Oracle Anda ke Amazon S3, lalu mengunduh dompet tersebut dari Amazon S3 ke instans RDS for Oracle Anda.
Untuk mengunduh dompet Oracle Anda ke instans DB RDS for Oracle Anda
-
Lengkapi persyaratan untuk integrasi Amazon S3 dengan Oracle, dan tambahkan opsi
S3_INTEGRATION
untuk instans DB Oracle Anda. Pastikan bahwa peran IAM untuk opsi tersebut memiliki akses ke bucket Amazon S3 yang Anda gunakan.Untuk informasi selengkapnya, lihat Integrasi Amazon S3.
-
Masuk ke instans DB Anda sebagai pengguna master, lalu buat direktori Oracle untuk menyimpan dompet Oracle.
Contoh berikut membuat direktori Oracle bernama
WALLET_DIR
.EXEC rdsadmin.rdsadmin_util.create_directory('
WALLET_DIR
');Untuk informasi selengkapnya, lihat Membuat dan menghapus direktori di ruang penyimpanan data utama.
-
Unggah dompet Oracle ke bucket Amazon S3.
Anda dapat menggunakan teknik unggahan apa pun yang didukung.
-
Jika Anda mengunggah ulang dompet Oracle, hapus dompet yang ada. Jika tidak, lewati ke langkah berikutnya.
Contoh berikut menghapus dompet yang ada, yang bernama
cwallet.sso
.EXEC UTL_FILE.FREMOVE ('
WALLET_DIR
','cwallet.sso
'); -
Unduh dompet Oracle dari bucket Amazon S3 ke instans DB Oracle.
Contoh berikut mengunduh dompet bernama
cwallet.sso
dari bucket Amazon S3 bernamamy_s3_bucket
ke direktori instans DB bernamaWALLET_DIR
.SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
my_s3_bucket
', p_s3_prefix => 'cwallet.sso
', p_directory_name => 'WALLET_DIR
') AS TASK_ID FROM DUAL; -
(Opsional) Unduh dompet Oracle yang dilindungi kata sandi.
Unduh dompet ini hanya jika Anda ingin mewajibkan kata sandi untuk setiap penggunaan dompet. Contoh berikut mengunduh dompet
ewallet.p12
yang dilindungi kata sandi.SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
my_s3_bucket
', p_s3_prefix => 'ewallet.p12
', p_directory_name => 'WALLET_DIR
') AS TASK_ID FROM DUAL; -
Periksa status tugas DB Anda.
Ganti ID tugas yang dikembalikan dari langkah-langkah sebelumnya untuk
dbtask-1234567890123-4567.log
dalam contoh berikut.SELECT TEXT FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','
dbtask-1234567890123-4567.log
')); -
Periksa isi direktori yang Anda gunakan untuk menyimpan dompet Oracle.
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => '
WALLET_DIR
'));Untuk informasi selengkapnya, lihat Membuat daftar file di direktori instans DB.
Langkah 4: Berikan izin pengguna untuk dompet Oracle
Anda dapat membuat pengguna basis data baru atau mengonfigurasi pengguna yang sudah ada. Dalam kedua kasus tersebut, Anda harus mengonfigurasi pengguna untuk mengakses dompet Oracle untuk koneksi yang aman dan autentikasi klien menggunakan sertifikat.
Untuk memberikan izin pengguna untuk dompet Oracle
-
Masuk ke instans DB RDS for Oracle sebagai pengguna master.
-
Jika Anda tidak ingin mengonfigurasi pengguna yang sudah ada, buat pengguna baru. Jika tidak, lewati ke langkah berikutnya.
Contoh berikut membuat pengguna basis data bernama
my-user
.CREATE USER
my-user
IDENTIFIED BYmy-user-pwd
; GRANT CONNECT TOmy-user
; -
Berikan izin kepada pengguna basis data Anda di direktori yang berisi dompet Oracle Anda.
Contoh berikut memberikan akses baca ke pengguna
my-user
di direktoriWALLET_DIR
.GRANT READ ON DIRECTORY
WALLET_DIR
TOmy-user
; -
Berikan izin kepada pengguna basis data Anda untuk menggunakan paket
UTL_HTTP
.Program PL/SQL berikut memberikan akses
UTL_HTTP
ke penggunamy-user
.BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('
my-user
')); END; / -
Berikan izin kepada pengguna basis data Anda untuk menggunakan paket
UTL_FILE
.Program PL/SQL berikut memberikan akses
UTL_FILE
ke penggunamy-user
.BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_FILE', UPPER('
my-user
')); END; /
Langkah 5: Konfigurasikan akses ke situs web dari instans DB Anda
Pada langkah ini, Anda mengonfigurasi agar pengguna basis data Oracle Anda dapat terhubung ke situs web target Anda menggunakan UTL_HTTP
, dompet Oracle yang Anda unggah, dan sertifikat klien. Untuk informasi selengkapnya, lihat Configuring Access Control to an Oracle Wallet
Untuk mengonfigurasikan akses ke situs web dari instans DB RDS for Oracle Anda
-
Masuk ke instans DB RDS for Oracle sebagai pengguna master.
-
Buat Entri Kontrol Akses Host (ACE) untuk pengguna Anda dan situs web target pada port yang aman.
Contoh berikut mengonfigurasi
my-user
untuk mengaksessecret.encrypted-website.com
pada port aman 443.BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '
secret.encrypted-website.com
', lower_port => 443, upper_port => 443, ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'my-user
', principal_type => xs_acl.ptype_db)); -- If the program unit results in PLS-00201, set -- the principal_type parameter to 2 as follows: -- principal_type => 2)); END; /penting
Unit program sebelumnya dapat mengakibatkan kesalahan berikut:
PLS-00201: identifier 'XS_ACL' must be declared
. Jika kesalahan ini dikembalikan, ganti baris yang menetapkan nilai keprincipal_type
dengan baris berikut, lalu jalankan kembali unit program tersebut:principal_type => 2));
Untuk informasi selengkapnya tentang konstanta dalam
XS_ACL
paket PL/SQL, lihat Real Application Security Administrator's and Developer's Guidedalam dokumentasi Oracle Database. Untuk informasi selengkapnya, lihat Configuring Access Control for External Network Services
dalam dokumentasi Oracle Database. -
(Opsional) Buat ACE untuk pengguna Anda dan situs web target pada port standar.
Anda mungkin perlu menggunakan port standar jika beberapa halaman web disajikan dari port server web standar (80), bukan port aman (443).
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '
secret.encrypted-website.com
', lower_port => 80, upper_port => 80, ace => xs$ace_type(privilege_list => xs$name_list('http'), principal_name => 'my-user
', principal_type => xs_acl.ptype_db)); -- If the program unit results in PLS-00201, set -- the principal_type parameter to 2 as follows: -- principal_type => 2)); END; / -
Konfirmasikan bahwa entri kontrol akses sudah ada.
SET LINESIZE 150 COLUMN HOST FORMAT A40 COLUMN ACL FORMAT A50 SELECT HOST, LOWER_PORT, UPPER_PORT, ACL FROM DBA_NETWORK_ACLS ORDER BY HOST;
-
Berikan izin kepada pengguna basis data Anda untuk menggunakan paket
UTL_HTTP
.Program PL/SQL berikut memberikan akses
UTL_HTTP
ke penggunamy-user
.BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('
my-user
')); END; / -
Konfirmasikan bahwa daftar kontrol akses terkait sudah ada.
SET LINESIZE 150 COLUMN ACL FORMAT A50 COLUMN PRINCIPAL FORMAT A20 COLUMN PRIVILEGE FORMAT A10 SELECT ACL, PRINCIPAL, PRIVILEGE, IS_GRANT, TO_CHAR(START_DATE, 'DD-MON-YYYY') AS START_DATE, TO_CHAR(END_DATE, 'DD-MON-YYYY') AS END_DATE FROM DBA_NETWORK_ACL_PRIVILEGES ORDER BY ACL, PRINCIPAL, PRIVILEGE;
-
Berikan izin kepada pengguna basis data Anda untuk menggunakan sertifikat untuk autentikasi klien dan dompet Oracle Anda untuk koneksi.
catatan
Jika Anda tidak menggunakan sertifikat klien untuk autentikasi, Anda dapat melewati langkah ini.
DECLARE l_wallet_path all_directories.directory_path%type; BEGIN SELECT DIRECTORY_PATH INTO l_wallet_path FROM ALL_DIRECTORIES WHERE UPPER(DIRECTORY_NAME)='
WALLET_DIR
'; DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE( wallet_path => 'file:/' || l_wallet_path, ace => xs$ace_type(privilege_list => xs$name_list('use_client_certificates'), principal_name => 'my-user
', principal_type => xs_acl.ptype_db)); END; /
Langkah 6: Uji koneksi dari instans DB Anda ke situs web
Pada langkah ini, Anda mengonfigurasi agar pengguna basis data Anda dapat terhubung ke situs web tersebut menggunakan UTL_HTTP
, dompet Oracle yang Anda unggah, dan sertifikat klien.
Untuk mengonfigurasikan akses ke situs web dari instans DB RDS for Oracle Anda
-
Masuk ke instans DB RDS for Oracle Anda sebagai pengguna basis data dengan izin
UTL_HTTP
. -
Konfirmasikan bahwa koneksi ke situs web target Anda dapat menyelesaikan alamat host.
Contoh berikut mendapatkan alamat host dari
secret.encrypted-website.com
.SELECT UTL_INADDR.GET_HOST_ADDRESS(host => '
secret.encrypted-website.com
') FROM DUAL; -
Uji koneksi yang gagal.
Kueri berikut gagal karena
UTL_HTTP
memerlukan lokasi dompet Oracle dengan sertifikat.SELECT UTL_HTTP.REQUEST('
secret.encrypted-website.com
') FROM DUAL; -
Uji akses situs web menggunakan
UTL_HTTP.SET_WALLET
dan memilih dariDUAL
.DECLARE l_wallet_path all_directories.directory_path%type; BEGIN SELECT DIRECTORY_PATH INTO l_wallet_path FROM ALL_DIRECTORIES WHERE UPPER(DIRECTORY_NAME)='
WALLET_DIR
'; UTL_HTTP.SET_WALLET('file:/' || l_wallet_path); END; / SELECT UTL_HTTP.REQUEST('secret.encrypted-website.com
') FROM DUAL; -
(Opsional) Uji akses situs web dengan menyimpan kueri Anda dalam variabel dan menggunakan
EXECUTE IMMEDIATE
.DECLARE l_wallet_path all_directories.directory_path%type; v_webpage_sql VARCHAR2(1000); v_results VARCHAR2(32767); BEGIN SELECT DIRECTORY_PATH INTO l_wallet_path FROM ALL_DIRECTORIES WHERE UPPER(DIRECTORY_NAME)='
WALLET_DIR
'; v_webpage_sql := 'SELECT UTL_HTTP.REQUEST(''secret.encrypted-website.com
'', '''', ''file:/' ||l_wallet_path||''') FROM DUAL'; DBMS_OUTPUT.PUT_LINE(v_webpage_sql); EXECUTE IMMEDIATE v_webpage_sql INTO v_results; DBMS_OUTPUT.PUT_LINE(v_results); END; / -
(Opsional) Temukan lokasi sistem file direktori dompet Oracle Anda.
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => '
WALLET_DIR
'));Gunakan output dari perintah sebelumnya untuk membuat permintaan HTTP. Misalnya, jika direktori adalah
rdsdbdata/userdirs/01
, jalankan kueri berikut.SELECT UTL_HTTP.REQUEST('
https://secret.encrypted-website.com/
', '', 'file://rdsdbdata/userdirs/01
') FROM DUAL;