Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfigurieren des UTL_HTTP-Zugriffs mit Zertifikaten und einer Oracle Wallet
Amazon RDS unterstützt ausgehenden Netzwerkzugriff auf Ihre DB-Instances von RDS für Oracle. Verbinden Sie Ihre DB-Instance mithilfe der folgenden PL/SQL-Pakete mit dem Netzwerk:
UTL_HTTP
-
Dieses Paket macht HTTP-Aufrufe von SQL und PL/SQL. Sie können damit über HTTP auf Daten im Internet zugreifen. Weitere Informationen finden Sie unter UTL_HTTP
in der Oracle-Dokumentation. UTL_TCP
-
Dieses Paket bietet clientseitige TCP/IP-Zugriffsfunktionalität in PL/SQL. Dieses Paket ist nützlich für PL/SQL-Anwendungen, die Internetprotokolle und E-Mails verwenden. Weitere Informationen finden Sie unter UTL_TCP
in der Oracle-Dokumentation. UTL_SMTP
-
Dieses Paket bietet Schnittstellen zu den SMTP-Befehlen, die es einem Client ermöglichen, E-Mails an einen SMTP-Server zu senden. Weitere Informationen finden Sie unter UTL_SMTP
in der Oracle-Dokumentation.
Wenn Sie die folgenden Aufgaben ausführen, können Sie UTL_HTTP.REQUEST
konfigurieren, um mit Websites zu arbeiten, die während des SSL-Handshakes Clientauthentifizierungszertifikate benötigen. Sie können auch die Kennwortauthentifizierung für UTL_HTTP
-Zugriff auf Websites konfigurieren, indem Sie die Befehle für das Generieren der Oracle Wallet und den Prozess DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE
ändern. Weitere Informationen finden Sie unter DBMS_NETWORK_ACL_ADMIN
Anmerkung
Sie können folgende Aufgaben für UTL_SMTP
anpassen, mit denen Sie E-Mails über SSL/TLS senden (einschließlich Amazon Simple Email Service
Themen
- Überlegungen zur Konfiguration des UTL_HTTP-Zugriffs
- Schritt 1: Abrufen des Stammzertifikats für eine Website
- Schritt 2: Erstellen einer Oracle Wallet
- Schritt 3: Herunterladen Ihrer Oracle Wallet auf Ihre RDS-for-Oracle-Instance
- Schritt 4: Erteilen Sie Benutzerberechtigungen für die Oracle Wallet
- Schritt 5: Konfigurieren des Zugriffs auf eine Website von Ihrer DB-Instance
- Schritt 6: Testen der Verbindungen Ihrer DB-Instance zu einer Website
Überlegungen zur Konfiguration des UTL_HTTP-Zugriffs
Berücksichtigen Sie Folgendes, bevor Sie den Zugriff konfigurieren:
-
Sie können SMTP mit der Option UTL_MAIL verwenden. Weitere Informationen finden Sie unter Orakel UTL _ MAIL.
-
Der DNS-Name (Domain Name Server) des Remote-Hosts kann einer der folgenden sein:
-
Öffentlich auflösbar.
-
Der Endpunkt einer Amazon RDS-DB-Instance.
-
Auflösbar über einen benutzerdefinierten DNS-Server. Weitere Informationen finden Sie unter Einen benutzerdefinierten DNS Server einrichten.
-
Der private DNS-Name einer Amazon EC2-Instance in derselben VPC oder einer gleichrangigen VPC. Stellen Sie in diesem Fall sicher, dass der Name über einen benutzerdefinierten DNS-Server auflösbar ist. Alternativ können Sie für die Verwendung des von Amazon bereitgestellten DNS das Attribut
enableDnsSupport
in den VPC-Einstellungen und den Support für DNS-Auflösung für die gleichrangige VPC-Verbindung aktivieren. Weitere Informationen finden Sie unter DNS-Unterstützung für Ihre VPC und Ändern Ihrer VPC-Peering-Verbindung. -
Für eine sichere Verbindung mit Remote-SSL/TLS-Ressourcen empfehlen wir Ihnen, benutzerdefinierte Oracle Wallets zu erstellen und hochzuladen. Mittels der Funktion zur Amazon S3-Integration in Amazon RDS for Oracle können Sie ein Wallet von Amazon S3 auf Oracle-DB-Instances herunterladen. Weitere Informationen über die Amazon S3-Integration für Oracle finden Sie unter Amazon S3-Integration.
-
-
Sie können Datenbankverbindungen zwischen Oracle-DB-Instances über einen SSL/TLS-Endpunkt einrichten, wenn die Oracle-SSL-Option für jede Instance konfiguriert ist. Weitere Konfigurationseinstellungen sind nicht erforderlich. Weitere Informationen finden Sie unter Oracle Secure Sockets Layer.
Schritt 1: Abrufen des Stammzertifikats für eine Website
Damit die DB-Instance von RDS für Oracle sichere Verbindungen zu einer Website herstellen kann, fügen Sie das Stammzertifizierungsstellenzertifikat hinzu. Amazon RDS verwendet das Stammzertifikat, um das Website-Zertifikat für die Oracle Wallet zu signieren.
Sie können das Stammzertifikat auf verschiedene Arten abrufen. Sie können z. B. Folgendes tun:
-
Verwenden Sie einen Webserver, um die durch das Zertifikat gesicherte Website aufzurufen.
-
Laden Sie das Stammzertifikat herunter, das zum Signieren verwendet wurde.
Für AWS-Services werden die Zertifikate üblicherweise im Amazon Trust Services Repository
Schritt 2: Erstellen einer Oracle Wallet
Erstellen Sie eine Oracle Wallet, die sowohl die Webserver-Zertifikate als auch die Clientauthentifizierungszertifikate enthält. Die RDS-Oracle-Instance verwendet das Webserver-Zertifikat, um eine sichere Verbindung zur Website herzustellen. Die Website benötigt das Clientzertifikat, um den Oracle-Datenbankbenutzer zu authentifizieren.
Möglicherweise möchten Sie sichere Verbindungen konfigurieren, ohne Clientzertifikate für die Authentifizierung zu verwenden. In diesem Fall können Sie die Java-Keystore-Schritte im folgenden Prozess überspringen.
Erstellen einer Oracle Wallet
-
Hinterlegen Sie die Root- und Clientzertifikate in einem einzelnen Verzeichnis und wechseln Sie dann in dieses Verzeichnis.
-
Konvertieren Sie das .p12-Clientzertifikat in den Java-Keystore.
Anmerkung
Wenn Sie keine Clientzertifikate für die Authentifizierung verwenden, können Sie diesen Schritt überspringen.
Im folgenden Beispiel wird das Clientzertifikat mit dem Namen
client_certificate.p12
zum Java-Keystore mit dem Namenclient_keystore.jks
konvertiert. Der Keystore wird dann in die Oracle Wallet integriert. Das Keystore-Passwort lautetP12PASSWORT
.orapki wallet pkcs12_to_jks -wallet ./
client_certificate.p12
-jksKeyStoreLoc ./client_keystore.jks
-jksKeyStorepwdP12PASSWORD
-
Erstellen Sie ein Verzeichnis für Ihre Oracle Wallet, das sich vom Zertifikatsverzeichnis unterscheidet.
Im folgenden Beispiel wird das Verzeichnis
/tmp/wallet
erstellt.mkdir -p
/tmp/wallet
-
Erstellen Sie eine Oracle Wallet in Ihrem Wallet-Verzeichnis.
Im folgenden Beispiel wird das Oracle-Wallet-Passwort auf
P12PASSWORT
festgelegt. Das ist das gleiche Passwort, das der Java-Keystore in einem vorherigen Schritt verwendet hat. Die Verwendung desselben Passworts ist praktisch, aber nicht notwendig. Der Parameter-auto_login
aktiviert die automatische Anmeldefunktion, sodass Sie nicht jedes Mal ein Passwort angeben müssen, wenn Sie darauf zugreifen möchten.Anmerkung
Geben Sie aus Sicherheitsgründen ein anderes Passwort als hier angegeben an.
orapki wallet create -wallet
/tmp/wallet
-pwdP12PASSWORD
-auto_login -
Fügen Sie den Java-Keystore zu Ihrer Oracle Wallet hinzu.
Anmerkung
Wenn Sie keine Clientzertifikate für die Authentifizierung verwenden, können Sie diesen Schritt überspringen.
Im folgenden Beispiel wird der Keystore
client_keystore.jks
zur Oracle Wallet namens/tmp/wallet
hinzugefügt. In diesem Beispiel geben Sie das gleiche Passwort für den Java-Keystore und die Oracle Wallet an.orapki wallet jks_to_pkcs12 -wallet
/tmp/wallet
-pwdP12PASSWORD
-keystore ./client_keystore.jks
-jkspwdP12PASSWORD
-
Fügen Sie das Stammzertifikat für Ihre Ziel-Website der Oracle Wallet hinzu.
Im folgenden Beispiel wird ein Zertifikat mit dem Namen
Root_CA.cer
hinzugefügt.orapki wallet add -wallet
/tmp/wallet
-trusted_cert -cert ./Root_CA.cer
-pwdP12PASSWORD
-
Hinzufügen von Zwischenzertifikaten
Im folgenden Beispiel wird ein Zertifikat mit dem Namen
Intermediate.cer
hinzugefügt. Wiederholen Sie diesen Schritt so oft wie nötig, bis Sie alle Zwischenzertifikate geladen haben.orapki wallet add -wallet
/tmp/wallet
-trusted_cert -cert ./Intermediate.cer
-pwdP12PASSWORD
-
Bestätigen Sie, dass Ihre neu erstellte Oracle Wallet über die erforderlichen Zertifikate verfügt.
orapki wallet display -wallet
/tmp/wallet
-pwdP12PASSWORD
Schritt 3: Herunterladen Ihrer Oracle Wallet auf Ihre RDS-for-Oracle-Instance
In diesem Schritt laden Sie Ihre Oracle Wallet auf Amazon S3 hoch und laden dann die Wallet von Amazon S3 auf Ihre RDS-for-Oracle-Instance herunter.
Laden Sie Ihre Oracle Wallet auf Ihre RDS-for-Oracle-Instance herunter wie folgt:
-
Erfüllen Sie die Voraussetzungen für die Amazon S3-Integration in Oracle und fügen Sie die Option
S3_INTEGRATION
zu Ihrer Oracle-DB-Instance hinzu. Stellen Sie sicher, dass die IAM-Rolle für die Option Zugriff auf den Amazon S3-Bucket hat, den Sie verwenden.Weitere Informationen finden Sie unter Amazon S3-Integration.
-
Melden Sie sich als Hauptbenutzer bei Ihrer DB-Instance an und erstellen Sie dann ein Oracle-Verzeichnis für die Oracle Wallet.
Im folgenden Beispiel wird ein Oracle-Verzeichnis mit dem Namen
WALLET_DIR
erstellt.EXEC rdsadmin.rdsadmin_util.create_directory('
WALLET_DIR
');Weitere Informationen finden Sie unter Erstellen und Löschen von Verzeichnissen im Hauptdatenspeicherbereich.
-
Laden Sie die Oracle Wallet zu Ihrem Amazon S3 Bucket hoch.
Sie können jede unterstützte Upload-Technik verwenden.
-
Wenn Sie eine Oracle Wallet erneut hochladen, löschen Sie die vorhandene Wallet. Andernfalls überspringen Sie diesen Schritt und gehen Sie direkt zum nächsten.
Im folgenden Beispiel wird die vorhandene Wallet mit dem Namen
cwallet.sso
entfernt.EXEC UTL_FILE.FREMOVE ('
WALLET_DIR
','cwallet.sso
'); -
Laden Sie die Oracle Wallet aus Ihrem Amazon S3 Bucket zur Oracle-DB-Instance herunter.
Im folgenden Beispiel wird die Wallet mit dem Namen
cwallet.sso
aus dem Amazon S3 Bucket mit dem Namenmy_s3_bucket
in das DB-Instance-Verzeichnis mit dem NamenWALLET_DIR
heruntergeladen.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; -
(Optional) Laden Sie eine kennwortgeschützte Oracle Wallet herunter.
Laden Sie diese Wallet nur herunter, wenn Sie für jede Verwendung der Wallet eine Passworteingabe fordern. Im folgenden Beispiel wird die passwortgeschützte Wallet
ewallet.p12
heruntergeladen.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; -
Überprüfen Sie den Status Ihrer DB-Anfrage.
Ersetzen Sie die von den vorangegangenen Schritten zurückgegebene Aufgaben-ID für
dbtask-1234567890123-4567.log
im folgenden Beispiel.SELECT TEXT FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','
dbtask-1234567890123-4567.log
')); -
Überprüfen Sie den Inhalt des Verzeichnisses, das Sie zum Speichern der Oracle Wallet verwenden.
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => '
WALLET_DIR
'));Weitere Informationen finden Sie unter Auflisten von Dateien in einem DB-Instance-Verzeichnis.
Schritt 4: Erteilen Sie Benutzerberechtigungen für die Oracle Wallet
Sie können entweder einen neuen Datenbankbenutzer erstellen oder einen vorhandenen Benutzer konfigurieren. In beiden Fällen müssen Sie den Benutzer so konfigurieren, dass er auf die Oracle Wallet zugreift, um sichere Verbindungen und Clientauthentifizierung mit Zertifikaten zu erhalten.
Erteilen Sie Benutzerberechtigungen für die Oracle Wallet wie folgt:
-
Melden Sie sich als Hauptnutzer bei Ihrer RDS-for-Oracle-DB-Instance an.
-
Wenn Sie keinen bestehenden Datenbankbenutzer konfigurieren möchten, erstellen Sie einen neuen Benutzer. Andernfalls überspringen Sie diesen Schritt und gehen Sie direkt zum nächsten.
Im folgenden Beispiel wird ein Datenbankbenutzer mit dem Namen
my-user
erstellt.CREATE USER
my-user
IDENTIFIED BYmy-user-pwd
; GRANT CONNECT TOmy-user
; -
Erteilen Sie Ihrem Datenbankbenutzer die Berechtigung für das Verzeichnis, das Ihre Oracle Wallet enthält.
Im folgenden Beispiel wird dem Benutzer
my-user
Lesezugriff für das VerzeichnisWALLET_DIR
gewährt.GRANT READ ON DIRECTORY
WALLET_DIR
TOmy-user
; -
Erteilen Sie Ihrem Datenbankbenutzer die Berechtigung zur Nutzung des Pakets
UTL_HTTP
.Das folgende PL/SQL-Programm gewährt dem Benutzer
my-user
UTL_HTTP
-Zugriff.BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('
my-user
')); END; / -
Erteilen Sie Ihrem Datenbankbenutzer die Berechtigung zur Nutzung des Pakets
UTL_FILE
.Das folgende PL/SQL-Programm gewährt dem Benutzer
my-user
UTL_FILE
-Zugriff.BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_FILE', UPPER('
my-user
')); END; /
Schritt 5: Konfigurieren des Zugriffs auf eine Website von Ihrer DB-Instance
In diesem Schritt konfigurieren Sie Ihren Oracle Datenbankbenutzer so, dass er sich über UTL_HTTP
, die hochgeladene Oracle Wallet und das Clientzertifikat mit Ihrer Zielwebsite verbinden kann. Weitere Informationen finden Sie unter Configuring Access Control to an Oracle Wallet
Konfigurieren des Zugriffs auf eine Website von Ihrer Oracle-DB-Instance
-
Melden Sie sich als Hauptnutzer bei Ihrer RDS-for-Oracle-DB-Instance an.
-
Erstellen Sie einen Host Access Control Entry (ACE) für Ihren Benutzer und die Zielwebsite auf einem sicheren Port.
Im folgenden Beispiel wird
my-user
so konfiguriert, dass er Zugriff aufsecret.encrypted-website.com
auf dem sicheren Port 443 erhält.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; /Wichtig
Die vorhergehende Programmeinheit kann zu folgendem Fehler führen:
PLS-00201: identifier 'XS_ACL' must be declared
. Wenn dieser Fehler zurückgegeben wird, ersetzen Sie die Zeile, die einen Wert zuweist,principal_type
durch die folgende Zeile und führen Sie dann die Programmeinheit erneut aus:principal_type => 2));
Weitere Informationen zu Konstanten im PL/SQL-Paket finden Sie
XS_ACL
unter Administratorhandbuch für Real Application Security und Entwicklerhandbuchin der Oracle-Database-Dokumentation. Weitere Informationen finden Sie unter Configuring Access Control for External Network Services
in der Dokumentation zur Oracle Database. -
(Optional) Erstellen Sie einen ACE für Ihren Benutzer und Ihre Zielwebsite am Standardport.
Möglicherweise müssen Sie den Standardport verwenden, wenn einige Webseiten vom Standard-Webserver-Port (80) anstelle des sicheren Ports (443) bereitgestellt werden.
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; / -
Bestätigen Sie, dass die Zugriffssteuerungseinträge existieren.
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;
-
Erteilen Sie Ihrem Datenbankbenutzer die Berechtigung zur Nutzung des Pakets
UTL_HTTP
.Das folgende PL/SQL-Programm gewährt dem Benutzer
my-user
UTL_HTTP
-Zugriff.BEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('
my-user
')); END; / -
Bestätigen Sie, dass verwandte Zugriffssteuerungslisten existieren.
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;
-
Erteilen Sie Ihrem Datenbankbenutzer die Berechtigung, Zertifikate für die Clientauthentifizierung und Ihr Oracle Wallet für Verbindungen zu verwenden.
Anmerkung
Wenn Sie keine Clientzertifikate für die Authentifizierung verwenden, können Sie diesen Schritt überspringen.
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; /
Schritt 6: Testen der Verbindungen Ihrer DB-Instance zu einer Website
In diesem Schritt konfigurieren Sie Ihren Datenbankbenutzer so, dass er sich über UTL_HTTP
, die hochgeladene Oracle Wallet und das Clientzertifikat mit der Website verbinden kann.
Konfigurieren des Zugriffs auf eine Website von Ihrer Oracle-DB-Instance
-
Melden Sie sich bei Ihrer RDS-for-Oracle-DB-Instance als Datenbankbenutzer mit
UTL_HTTP
-Berechtigungen an. -
Bestätigen Sie, dass eine Verbindung zu Ihrer Zielwebsite die Hostadresse auflösen kann.
Im folgenden Beispiel wird die Host-Adresse von
secret.encrypted-website.com
abgerufen.SELECT UTL_INADDR.GET_HOST_ADDRESS(host => '
secret.encrypted-website.com
') FROM DUAL; -
Testen Sie eine fehlgeschlagene Verbindung.
Die folgende Abfrage schlägt fehl, da
UTL_HTTP
den Speicherort der Oracle Wallet mit den Zertifikaten benötigt.SELECT UTL_HTTP.REQUEST('
secret.encrypted-website.com
') FROM DUAL; -
Testen Sie den Website-Zugriff durch die Verwendung von
UTL_HTTP.SET_WALLET
wählen SieDUAL
aus.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; -
(Optional) Testen Sie den Website-Zugriff, indem Sie Ihre Abfrage in einer Variable speichern und
EXECUTE IMMEDIATE
verwenden.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; / -
(Optional) Suchen Sie den Dateisystemspeicherort Ihres Oracle-Wallet-Verzeichnisses.
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => '
WALLET_DIR
'));Verwenden Sie die Ausgabe des vorherigen Befehls, um eine HTTP-Anfrage zu stellen. Lautet das Verzeichnis
rdsdbdata/userdirs/01
, führen Sie beispielsweise die folgende Abfrage aus.SELECT UTL_HTTP.REQUEST('
https://secret.encrypted-website.com/
', '', 'file://rdsdbdata/userdirs/01
') FROM DUAL;