Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configurazione dell'accesso UTL_HTTP utilizzando certificati e un portafoglio Oracle
Amazon RDS supporta l’accesso alla rete in uscita nelle istanze database RDS per Oracle. Per connettere l'istanza DB alla rete, è possibile utilizzare i seguenti PL/SQL pacchetti:
UTL_HTTP-
Questo pacchetto effettua chiamate HTTP da SQL e PL/SQL. Puoi utilizzarlo per accedere ai dati su Internet tramite HTTP. Per ulteriori informazioni, consulta UTL_HTTP
nella documentazione di Oracle. UTL_TCP-
Questo pacchetto fornisce funzionalità di accesso TCP/IP lato client nelle PL/SQL. This package is useful to PL/SQL applicazioni che utilizzano protocolli Internet e posta elettronica. Per ulteriori informazioni, consulta UTL_TCP
nella documentazione di Oracle. UTL_SMTP-
Questo pacchetto fornisce interfacce ai comandi SMTP che consentono a un client di inviare messaggi di posta elettronica a un server SMTP. Per ulteriori informazioni, consulta UTL_SMTP
nella documentazione di Oracle.
Completando le seguenti attività, puoi configurare UTL_HTTP.REQUEST affinché funzioni con siti Web che richiedono certificati di autenticazione client durante l'handshake SSL. Puoi anche configurare l'autenticazione con password affinché UTL_HTTP acceda ai siti Web modificando i comandi di generazione del portafoglio Oracle wallet e la procedura DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE. Per ulteriori informazioni, consulta DBMS_NETWORK_ACL_ADMIN
Nota
Puoi adattare le seguenti attività per UTL_SMTP, il che consente di inviare e-mail tramite SSL/TLS (incluso Amazon Simple Email Service
Argomenti
Considerazioni sulla configurazione dell’accesso UTL_HTTP
Prima di configurare l’accesso, valuta quanto segue:
-
Puoi utilizzare SMTP con l’opzione UTL_MAIL. Per ulteriori informazioni, consulta UTL_MAIL di Oracle.
-
Il nome del DNS (Domain Name Server) dell'host remoto può essere uno qualsiasi dei seguenti:
-
Risolvibile pubblicamente.
-
L'endpoint di un'istanza database Amazon RDS.
-
Risolvibile attraverso un server DNS personalizzato. Per ulteriori informazioni, consulta Impostazione di un server DNS personalizzato.
-
Il nome DNS privato di un'istanza Amazon EC2 nello stesso VPC o in un VPC in peering. In questo caso, assicurarsi che il nome sia risolvibile attraverso un server DNS personalizzato. In alternativa, per utilizzare il DNS fornito da Amazon, è possibile abilitare l'attributo
enableDnsSupportnelle impostazioni VPC e abilitare il supporto alla risoluzione DNS per la connessione VPC in peering. Per ulteriori informazioni, consulta la sezione sul supporto DNS nel tuo VPC e quella sulla modifica della tua connessione VPC in peering. -
Per connettersi in modo sicuro alle SSL/TLS risorse remote, si consiglia di creare e caricare portafogli Oracle personalizzati. Utilizzando la funzionalità di integrazione di Amazon S3 con Amazon RDS for Oracle, è possibile scaricare un portafoglio da Amazon S3 sulle istanze database Oracle. Per informazioni sull'integrazione di Amazon S3 per Oracle, consultare Integrazione Amazon S3.
-
-
Se l'opzione SSL Oracle è configurata per ogni istanza, è possibile stabilire collegamenti di database tra istanze database di Oracle tramite un endpoint SSL/TLS. Non è richiesta alcuna configurazione aggiuntiva. Per ulteriori informazioni, consulta Oracle Secure Sockets Layer.
Passaggio 1: ottieni il certificato root per un sito Web
Affinché l’istanza database RDS per Oracle possa stabilire connessioni sicure a un sito web, aggiungi il certificato CA root. Amazon RDS utilizza il certificato root per firmare il certificato del sito Web al portafoglio Oracle.
È possibile ottenere il certificato root in vari modi. Ad esempio, puoi eseguire le operazioni seguenti:
-
Utilizza un server Web per visitare il sito Web protetto dal certificato.
-
Scarica il certificato root utilizzato per la firma.
Per quanto riguarda AWS i servizi, i certificati root in genere risiedono nell'archivio Amazon Trust Services
Passaggio 2: crea un portafoglio Oracle
Crea un portafoglio Oracle contenente sia i certificati del server Web che i certificati di autenticazione client. L'istanza Oracle RDS utilizza il certificato del server Web per stabilire una connessione sicura al sito Web. Il sito Web ha bisogno del certificato client per autenticare l'utente del database Oracle.
È possibile configurare connessioni sicure senza utilizzare certificati client per l'autenticazione. In questo caso, puoi ignorare i passaggi del keystore Java nella seguente procedura.
Per creare un portafoglio Oracle
-
Posiziona i certificati root e client in un'unica directory, quindi passa a questa directory.
-
Converti il certificato client .p12 nel keystore Java.
Nota
Se non utilizzi certificati client per l'autenticazione, puoi ignorare questo passaggio.
L'esempio seguente converte il certificato client denominato
client_certificate.p12nel keystore Java denominato.client_keystore.jksIl keystore viene quindi incluso nel portafoglio Oracle. La password del keystore è.P12PASSWORDorapki wallet pkcs12_to_jks -wallet ./client_certificate.p12-jksKeyStoreLoc ./client_keystore.jks-jksKeyStorepwdP12PASSWORD -
Crea una directory per il tuo portafoglio Oracle diversa dalla directory dei certificati.
Nell'esempio seguente viene creata la directory
/tmp/wallet.mkdir -p/tmp/wallet -
Crea un portafoglio Oracle nella directory del portafoglio.
L'esempio seguente imposta la password del wallet Oracle su
P12PASSWORD, che è la stessa password utilizzata dal keystore Java in un passaggio precedente. L'utilizzo della stessa password è comodo, ma non necessario. Il parametro-auto_loginattiva la caratteristica di accesso automatico, in modo che non sia necessario specificare una password ogni volta che si desidera accedervi.Nota
Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.
orapki wallet create -wallet/tmp/wallet-pwdP12PASSWORD-auto_login -
Aggiungi il keystore Java al tuo portafoglio Oracle.
Nota
Se non utilizzi certificati client per l'autenticazione, puoi ignorare questo passaggio.
L'esempio seguente aggiunge il keystore
client_keystore.jksal wallet Oracle denominato./tmp/walletIn questo esempio, si specifica la stessa password del keystore Java e del portafoglio Oracle.orapki wallet jks_to_pkcs12 -wallet/tmp/wallet-pwdP12PASSWORD-keystore ./client_keystore.jks-jkspwdP12PASSWORD -
Aggiungi il certificato root per il tuo sito Web di destinazione al portafoglio Oracle.
L'esempio seguente aggiunge un certificato denominato
Root_CA.cer.orapki wallet add -wallet/tmp/wallet-trusted_cert -cert ./Root_CA.cer-pwdP12PASSWORD -
Aggiungi eventuali certificati intermedi.
L'esempio seguente aggiunge un certificato denominato
Intermediate.cer. Ripeti questo passaggio tutte le volte necessarie per caricare tutti i certificati intermedi.orapki wallet add -wallet/tmp/wallet-trusted_cert -cert ./Intermediate.cer-pwdP12PASSWORD -
Verifica che il tuo portafoglio Oracle appena creato disponga dei certificati richiesti.
orapki wallet display -wallet/tmp/wallet-pwdP12PASSWORD
Passaggio 3: scarica il tuo portafoglio Oracle nella tua istanza RDS for Oracle
In questo passaggio, carichi il tuo portafoglio Oracle su Amazon S3 e poi scarichi il portafoglio da Amazon S3 nella tua istanza RDS for Oracle.
Per scaricare il tuo portafoglio Oracle nella tua istanza database RDS for Oracle
-
Completare i prerequisiti per l'integrazione di Amazon S3 con Oracle e aggiungere l'opzione
S3_INTEGRATIONall'istanza database Oracle. Assicurarsi che il ruolo IAM per l'opzione abbia accesso al bucket Amazon S3 che si sta utilizzando.Per ulteriori informazioni, consulta Integrazione Amazon S3.
-
Accedei all'istanza database come utente principale e quindi crea una directory Oracle per contenere il portafoglio Oracle.
L'esempio seguente crea una directory Oracle denominata
WALLET_DIR.EXEC rdsadmin.rdsadmin_util.create_directory('WALLET_DIR');Per ulteriori informazioni, consulta Creazione ed eliminazione di directory nello spazio di archiviazione dati principale.
-
Carica il portafoglio Oracle sul tuo bucket Amazon S3.
Puoi utilizzare qualsiasi tecnica di caricamento supportata.
-
Se stai ricaricando un portafoglio Oracle, elimina il portafoglio esistente. Altrimenti, passare alla fase successiva.
L'esempio seguente rimuove il wallet esistente, denominato
cwallet.sso.EXEC UTL_FILE.FREMOVE ('WALLET_DIR','cwallet.sso'); -
Scarica il portafoglio Oracle dal bucket Amazon S3 sull'istanza database Oracle.
L'esempio seguente scarica il wallet denominato
cwallet.ssodal bucket Amazon S3 denominato nella directory dell'istanza DB denominatamy_s3_bucket.WALLET_DIRSELECT 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; -
(Facoltativo) Scarica un portafoglio Oracle protetto da password.
Scarica questo portafoglio solo se vuoi richiedere una password per ogni utilizzo del portafoglio. L'esempio seguente scarica un portafoglio protetto da password.
ewallet.p12SELECT 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; -
Verifica lo stato dell'attività del database.
Sostituisci l'ID dell'attività restituito dai passaggi precedenti con quello riportato nell'esempio
dbtask-1234567890123-4567.logseguente.SELECT TEXT FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1234567890123-4567.log')); -
Controlla il contenuto della directory che stai utilizzando per memorizzare il portafoglio Oracle.
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'WALLET_DIR'));Per ulteriori informazioni, consulta Generazione di un elenco dei file in una directory di istanze database.
Passaggio 4: concedi le autorizzazioni utente per il portafoglio Oracle
Puoi creare un nuovo utente database o configurare un utente esistente. In entrambi i casi, è necessario configurare l'utente per accedere al portafoglio Oracle per le connessioni sicure e l'autenticazione client tramite certificati.
Per concedere autorizzazioni utente per il portafoglio Oracle
-
Accedi all'istanza database RDS for Oracle come utente principale.
-
Se non desideri configurare un utente del database esistente, creare un nuovo utente. Altrimenti, passare alla fase successiva.
L'esempio seguente crea un utente del database denominato.
my-userCREATE USERmy-userIDENTIFIED BYmy-user-pwd; GRANT CONNECT TOmy-user; -
Concedi l'autorizzazione all'utente del database nella directory contenente il portafoglio Oracle.
L'esempio seguente concede l'accesso in lettura all'utente
my-usersulla directoryWALLET_DIR.GRANT READ ON DIRECTORYWALLET_DIRTOmy-user; -
Concedi l'autorizzazione all'utente del database per utilizzare il pacchetto
UTL_HTTP.Il seguente PL/SQL programma concede
UTL_HTTPl'accesso all'utente.my-userBEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('my-user')); END; / -
Concedi l'autorizzazione all'utente del database per utilizzare il pacchetto
UTL_FILE.Il seguente PL/SQL programma concede
UTL_FILEl'accesso all'utente.my-userBEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_FILE', UPPER('my-user')); END; /
Passaggio 5: configura l'accesso a un sito Web dall'istanza database
In questa fase, configuri l'utente del database Oracle in modo che possa connettersi al sito Web di destinazione utilizzando UTL_HTTP, il portafoglio Oracle caricato e il certificato client. Per ulteriori informazioni, consulta Configuring Access Control to an Oracle Wallet
Per configurare l'accesso a un sito Web dall'istanza database RDS for Oracle
-
Accedi all'istanza database RDS for Oracle come utente principale.
-
Crea una voce di controllo dell'accesso (ACE) host per il tuo utente e il sito Web di destinazione su una porta sicura.
L'esempio seguente configura l'accesso
my-useralla porta sicurasecret.encrypted-website.com443.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; /Importante
L’unità di programma precedente può restituire il seguente errore:
PLS-00201: identifier 'XS_ACL' must be declared. Se viene restituito questo errore, sostituisci la riga che assegna un valore aprincipal_typecon la riga seguente, quindi esegui nuovamente l’unità di programma:principal_type => 2));Per ulteriori informazioni sulle costanti del PL/SQL pacchetto
XS_ACL, vedere Real Application Security Administrator's and Developer's Guidenella documentazione di Oracle Database. Per ulteriori informazioni, consulta Configuring Access Control for External Network Services
(Configurazione del controllo dell'accesso per servizi di rete esterni) nella documentazione di Oracle Database. -
(Facoltativo) Crea un ACE per il tuo sito Web utente e di destinazione sulla porta standard.
Potrebbe essere necessario utilizzare la porta standard se alcune pagine Web sono servite dalla porta standard del server Web (80) anziché dalla porta sicura (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; / -
Verifica che le voci di controllo dell'accesso siano presenti.
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; -
Concedi l'autorizzazione all'utente del database per utilizzare il pacchetto
UTL_HTTP.Il seguente PL/SQL programma concede
UTL_HTTPl'accesso all'utente.my-userBEGIN rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('my-user')); END; / -
Conferma l'esistenza di liste di controllo dell'accesso correlate.
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; -
Concedi l'autorizzazione all'utente del database di utilizzare i certificati per l'autenticazione client e il portafoglio Oracle per le connessioni.
Nota
Se non utilizzi certificati client per l'autenticazione, puoi ignorare questo passaggio.
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; /
Passaggio 6: testa le connessioni dall'istanza database a un sito Web
In questa fase, configuri l'utente del database in modo che possa connettersi al sito Web utilizzando UTL_HTTP, il portafoglio Oracle caricato e il certificato client.
Per configurare l'accesso a un sito Web dall'istanza database RDS for Oracle
-
Accedi all'istanza database RDS for Oracle come utente del database con autorizzazioni
UTL_HTTP. -
Conferma che una connessione al sito Web di destinazione può risolvere l'indirizzo host.
L'esempio seguente ottiene l'indirizzo dell'host da
secret.encrypted-website.com.SELECT UTL_INADDR.GET_HOST_ADDRESS(host => 'secret.encrypted-website.com') FROM DUAL; -
Testa una connessione non riuscita.
La seguente query ha esito negativo perché
UTL_HTTPrichiede la posizione del portafoglio Oracle con i certificati.SELECT UTL_HTTP.REQUEST('secret.encrypted-website.com') FROM DUAL; -
Verifica l'accesso al sito web utilizzando
UTL_HTTP.SET_WALLETe selezionando daDUAL.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; -
(Facoltativo) Testa l'accesso al sito Web memorizzando la query in una variabile e utilizzando
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; / -
(Facoltativo) Individua la posizione del file system della directory del portafoglio Oracle.
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'WALLET_DIR'));Utilizza l'output del comando precedente per effettuare una richiesta HTTP. Ad esempio, se la directory è
rdsdbdata/userdirs/01, esegui la seguente query.SELECT UTL_HTTP.REQUEST('https://secret.encrypted-website.com/', '', 'file://rdsdbdata/userdirs/01') FROM DUAL;