Mengonfigurasi akses UTL_HTTP menggunakan sertifikat dan dompet Oracle - Layanan Basis Data Relasional Amazon

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 dalam dokumentasi Oracle Database.

catatan

Anda dapat mengadaptasi tugas berikut untuk UTL_SMTP, yang memungkinkan Anda mengirim email melalui SSL/TLS (termasuk Amazon Simple Email Service).

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 server DNS kustom.

    • 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:

  1. Gunakan server web untuk mengunjungi situs web yang diamankan oleh sertifikat tersebut.

  2. 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
  1. Tempatkan sertifikat root dan klien dalam satu direktori, dan kemudian ubah ke direktori ini.

  2. 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 bernama client_keystore.jks. Keystore tersebut kemudian disertakan dalam dompet Oracle. Kata sandi keystore adalah P12PASSWORD.

    orapki wallet pkcs12_to_jks -wallet ./client_certificate.p12 -jksKeyStoreLoc ./client_keystore.jks -jksKeyStorepwd P12PASSWORD
  3. Buat direktori untuk dompet Oracle Anda yang berbeda dari direktori sertifikat.

    Contoh berikut membuat direktori /tmp/wallet.

    mkdir -p /tmp/wallet
  4. 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 -pwd P12PASSWORD -auto_login
  5. 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 -pwd P12PASSWORD -keystore ./client_keystore.jks -jkspwd P12PASSWORD
  6. 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 -pwd P12PASSWORD
  7. 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 -pwd P12PASSWORD
  8. Konfirmasikan bahwa dompet Oracle Anda yang baru dibuat memiliki sertifikat yang diperlukan.

    orapki wallet display -wallet /tmp/wallet -pwd P12PASSWORD

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
  1. 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.

  2. 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.

  3. Unggah dompet Oracle ke bucket Amazon S3.

    Anda dapat menggunakan teknik unggahan apa pun yang didukung.

  4. 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');
  5. Unduh dompet Oracle dari bucket Amazon S3 ke instans DB Oracle.

    Contoh berikut mengunduh dompet bernama cwallet.sso dari bucket Amazon S3 bernama my_s3_bucket ke direktori instans DB bernama WALLET_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;
  6. (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;
  7. 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'));
  8. 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
  1. Masuk ke instans DB RDS for Oracle sebagai pengguna master.

  2. 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 BY my-user-pwd; GRANT CONNECT TO my-user;
  3. Berikan izin kepada pengguna basis data Anda di direktori yang berisi dompet Oracle Anda.

    Contoh berikut memberikan akses baca ke pengguna my-user di direktori WALLET_DIR.

    GRANT READ ON DIRECTORY WALLET_DIR TO my-user;
  4. Berikan izin kepada pengguna basis data Anda untuk menggunakan paket UTL_HTTP.

    Program PL/SQL berikut memberikan akses UTL_HTTP ke pengguna my-user.

    BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('my-user')); END; /
  5. Berikan izin kepada pengguna basis data Anda untuk menggunakan paket UTL_FILE.

    Program PL/SQL berikut memberikan akses UTL_FILE ke pengguna my-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 dalam dokumentasi Oracle Database.

Untuk mengonfigurasikan akses ke situs web dari instans DB RDS for Oracle Anda
  1. Masuk ke instans DB RDS for Oracle sebagai pengguna master.

  2. Buat Entri Kontrol Akses Host (ACE) untuk pengguna Anda dan situs web target pada port yang aman.

    Contoh berikut mengonfigurasi my-user untuk mengakses secret.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 ke principal_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 Guide dalam dokumentasi Oracle Database.

    Untuk informasi selengkapnya, lihat Configuring Access Control for External Network Services dalam dokumentasi Oracle Database.

  3. (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; /
  4. 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;
  5. Berikan izin kepada pengguna basis data Anda untuk menggunakan paket UTL_HTTP.

    Program PL/SQL berikut memberikan akses UTL_HTTP ke pengguna my-user.

    BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('my-user')); END; /
  6. 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;
  7. 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
  1. Masuk ke instans DB RDS for Oracle Anda sebagai pengguna basis data dengan izin UTL_HTTP.

  2. 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;
  3. 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;
  4. Uji akses situs web menggunakan UTL_HTTP.SET_WALLET dan memilih dari DUAL.

    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;
  5. (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; /
  6. (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;