

# 인증서 및 Oracle Wallet을 사용하여 UTL\$1HTTP 액세스 구성
<a name="Oracle.Concepts.ONA"></a>

Amazon RDS는 RDS for Oracle DB 인스턴스에서 아웃바운드 네트워크 액세스를 지원합니다. DB 인스턴스를 네트워크에 연결하기 위해 다음 PL/SQL 패키지를 사용할 수 있습니다.

`UTL_HTTP`  
이 패키지는 SQL 및 PL/SQL에서 HTTP를 호출합니다. HTTP를 통해 인터넷의 데이터에 액세스하는 데 사용할 수 있습니다. 자세한 내용은 Oracle 설명서의 [UTL\$1HTTP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_HTTP.html#GUID-A85D2D1F-90FC-45F1-967F-34368A23C9BB)를 참조하세요.

`UTL_TCP`  
이 패키지는 PL/SQL에서 TCP/IP 클라이언트 측 액세스 기능을 제공합니다. 이 패키지는 인터넷 프로토콜과 이메일을 사용하는 PL/SQL 애플리케이션에 유용합니다. 자세한 내용은 Oracle 설명서의 [UTL\$1TCP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_TCP.html#GUID-348AFFE8-78B2-4217-AE73-384F46A1D292)를 참조하세요.

`UTL_SMTP`  
이 패키지는 클라이언트가 SMTP 서버로 이메일을 보낼 수 있도록 SMTP 명령에 대한 인터페이스를 제공합니다. 자세한 내용은 Oracle 설명서의 [UTL\$1SMTP](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/UTL_SMTP.html#GUID-F0065C52-D618-4F8A-A361-7B742D44C520)를 참조하세요.

다음 태스크를 완료하면 SSL 핸드셰이크 중에 클라이언트 인증 인증서가 필요한 웹 사이트에서 작동하도록 `UTL_HTTP.REQUEST`를 구성할 수 있습니다. Oracle Wallet 생성 명령과 `DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE` 절차를 수정하여 웹 사이트에 대한 `UTL_HTTP` 액세스의 암호 인증을 구성할 수도 있습니다. 자세한 내용은 Oracle Database 설명서의 [DBMS\$1NETWORK\$1ACL\$1ADMIN](https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/DBMS_NETWORK_ACL_ADMIN.html)을 참조하세요.

**참고**  
SSL/TLS([Amazon Simple Email Service](https://aws.amazon.com/ses/) 포함)를 통해 이메일을 보낼 수 있도록 하는 `UTL_SMTP`에 대해 다음 태스크를 적용할 수 있습니다.

**Topics**
+ [UTL\$1HTTP 액세스 구성 구성 시 고려 사항](#utl_http-considerations)
+ [1단계: 웹 사이트의 루트 인증서 가져오기](#website-root-certificate)
+ [2단계: Oracle Wallet 생성](#create-oracle-wallet)
+ [3단계: RDS for Oracle 인스턴스로 Oracle Wallet 다운로드](#upload-wallet-to-instance)
+ [4단계: Oracle Wallet에 대한 사용자 권한 부여](#config-oracle-wallet-user)
+ [5단계: DB 인스턴스에서 웹 사이트에 대한 액세스 구성](#config-website-access)
+ [6단계: DB 인스턴스에서 웹 사이트로의 연결 테스트](#test_utl_http)

## UTL\$1HTTP 액세스 구성 구성 시 고려 사항
<a name="utl_http-considerations"></a>

액세스를 구성하기 전에 다음 사항을 고려하세요.
+ SMTP를 UTL\$1MAIL 옵션으로 사용할 수 있습니다. 자세한 내용은 [Oracle UTL\$1MAIL](Oracle.Options.UTLMAIL.md) 섹션을 참조하세요.
+ 원격 호스트의 DNS(Domain Name Server) 이름은 다음 중 어느 것이나 될 수 있습니다.
  + 공개적으로 확인할 수 있어야 함.
  + Amazon RDS DB 인스턴스의 엔드포인트.
  + 사용자 지정 DNS 서버를 통해 확인 가능 자세한 내용은 [사용자 지정 DNS 서버 설정](Appendix.Oracle.CommonDBATasks.System.md#Appendix.Oracle.CommonDBATasks.CustomDNS) 섹션을 참조하세요.
  + 동일한 VPC 또는 피어링된 VPC에 있는 Amazon EC2 인스턴스의 프라이빗 DNS 이름. 이 경우, 사용자 지정 DNS 서버를 통해 이름을 확인할 수 있어야 합니다. 또는 Amazon이 제공하는 DNS를 사용하기 위해 VPC 설정에서 `enableDnsSupport` 속성을 활성화하고 VPC 피어링 연결에 대한 DNS 확인 지원을 활성화할 수 있습니다. 자세한 내용은 [VPC에서 DNS 지원](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-support) 및 [VPC 피어링 연결 수정](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html#modify-peering-connections) 단원을 참조하십시오.
  + 원격 SSL/TLS 리소스에 안전하게 연결하기 위해 사용자 지정 Oracle Wallet을 생성하고 업로드하는 것이 좋습니다. Amazon S3와 Amazon RDS for Oracle의 통합을 사용하여 Oracle DB 인스턴스로 Amazon S3의 Wallet을 다운로드할 수 있습니다. Oracle에 대한 Amazon S3 통합에 대한 자세한 내용은 [Amazon S3 통합](oracle-s3-integration.md) 단원을 참조하십시오.
+ 각 인스턴스에 Oracle SSL 옵션이 구성된 경우 SSL/TLS 엔드포인트를 통해 Oracle DB 인스턴스 사이에 데이터베이스 링크를 설정할 수 있습니다. 추가 구성이 필요하지 않습니다. 자세한 내용은 [Oracle 보안 소켓 Layer](Appendix.Oracle.Options.SSL.md) 섹션을 참조하세요.

## 1단계: 웹 사이트의 루트 인증서 가져오기
<a name="website-root-certificate"></a>

RDS for Oracle DB 인스턴스가 웹 사이트에 대한 보안 연결을 설정하도록 루트 CA 인증서를 추가합니다. Amazon RDS는 루트 인증서를 사용하여 Oracle Wallet에 웹 사이트 인증서를 서명합니다.

다양한 방법으로 루트 인증서를 얻을 수 있습니다. 예를 들면, 다음을 수행할 수 있습니다.

1. 웹 서버를 사용하여 인증서로 보호되는 웹 사이트를 방문합니다.

1. 서명에 사용된 루트 인증서를 다운로드합니다.

AWS 서비스의 경우 루트 인증서는 일반적으로 [Amazon trust services 리포지토리](https://www.amazontrust.com/repository/)에 있습니다.

## 2단계: Oracle Wallet 생성
<a name="create-oracle-wallet"></a>

웹 서버 인증서와 클라이언트 인증 인증서를 모두 포함하는 Oracle Wallet을 생성합니다. RDS Oracle 인스턴스는 웹 서버 인증서를 사용하여 웹 사이트에 대한 보안 연결을 설정합니다. 웹 사이트는 Oracle 데이터베이스 사용자를 인증하기 위해 클라이언트 인증서를 필요로 합니다.

인증에 클라이언트 인증서를 사용하지 않고 보안 연결을 구성할 수 있습니다. 이 경우 다음 절차에서 Java KeyStore 단계를 건너뛸 수 있습니다.

**Oracle Wallet 생성**

1. 루트 및 클라이언트 인증서를 단일 디렉터리에 넣은 다음 이 디렉터리로 변경합니다.

1. .p12 클라이언트 인증서를 Java KeyStore로 변환합니다.
**참고**  
인증에 클라이언트 인증서를 사용하지 않는 경우 이 단계를 건너뛸 수 있습니다.

   다음 예에서는 *client\$1certificate.p12*라는 클라이언트 인증서를 *client\$1keystore.jks*라는 Java KeyStore로 변환합니다. 그러면 KeyStore가 Oracle Wallet에 포함됩니다. KeyStore 암호는 *P12PASSWORD*입니다.

   ```
   orapki wallet pkcs12_to_jks -wallet ./client_certificate.p12 -jksKeyStoreLoc ./client_keystore.jks -jksKeyStorepwd P12PASSWORD
   ```

1. 인증서 디렉터리와 다른 Oracle Wallet용 디렉터리를 생성합니다.

   다음 예에서는 `/tmp/wallet` 디렉터리를 생성합니다.

   ```
   mkdir -p /tmp/wallet
   ```

1. wallet 디렉터리에 Oracle Wallet을 생성합니다.

   다음 예에서는 Oracle Wallet 암호를 이전 단계에서 Java KeyStore에서 사용한 것과 동일한 암호인 *P12PASSWORD*로 설정합니다. 동일한 암호를 사용하면 편리하지만 필수는 아닙니다. `-auto_login` 파라미터가 자동 로그인 기능을 켜므로 액세스할 때마다 암호를 지정할 필요가 없습니다.
**참고**  
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.

   ```
   orapki wallet create -wallet /tmp/wallet -pwd P12PASSWORD -auto_login
   ```

1. Oracle Wallet에 Java KeyStore를 추가합니다.
**참고**  
인증에 클라이언트 인증서를 사용하지 않는 경우 이 단계를 건너뛸 수 있습니다.

   다음 예에서는 */tmp/wallet*이라는 Oracle Wallet에 KeyStore *client\$1keystore.jks*를 추가합니다. 이 예에서는 Java KeyStore와 Oracle Wallet에 대해 동일한 암호를 지정합니다.

   ```
   orapki wallet jks_to_pkcs12 -wallet /tmp/wallet -pwd P12PASSWORD -keystore ./client_keystore.jks -jkspwd P12PASSWORD
   ```

1. 대상 웹 사이트의 루트 인증서를 Oracle Wallet에 추가합니다.

   다음 예에서는 *Root\$1CA.cer*이라는 인증서를 추가합니다.

   ```
   orapki wallet add -wallet /tmp/wallet -trusted_cert -cert ./Root_CA.cer -pwd P12PASSWORD
   ```

1. 중간 인증서를 추가합니다.

   다음 예에서는 *Intermediate.cer*이라는 인증서를 추가합니다. 모든 중간 인증서를 로드하는 데 필요한 만큼 이 단계를 반복합니다.

   ```
   orapki wallet add -wallet /tmp/wallet -trusted_cert -cert ./Intermediate.cer -pwd P12PASSWORD
   ```

1. 새로 생성된 Oracle Wallet에 필요한 인증서가 있는지 확인합니다.

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

## 3단계: RDS for Oracle 인스턴스로 Oracle Wallet 다운로드
<a name="upload-wallet-to-instance"></a>

이 단계에서는 Oracle Wallet을 Amazon S3에 업로드한 다음 Amazon S3에서 RDS for Oracle 인스턴스로 Wallet을 다운로드합니다.

**RDS for Oracle DB 인스턴스로 Oracle Wallet 다운로드**

1. Oracle과 Amazon S3 통합을 위한 사전 조건을 만족시키고 `S3_INTEGRATION` 옵션을 Oracle DB 인스턴스에 추가하십시오. 옵션의 IAM 역할에 사용 중인 Amazon S3 버킷에 대한 액세스 권한이 있어야 합니다.

   자세한 내용은 [Amazon S3 통합](oracle-s3-integration.md) 섹션을 참조하세요.

1. DB 인스턴스에 마스터 사용자로 로그인한 다음 Oracle Wallet을 보관할 Oracle 디렉터리를 생성합니다.

   다음 예에서는 *WALLET\$1DIR*이라는 Oracle 디렉터리를 생성합니다.

   ```
   EXEC rdsadmin.rdsadmin_util.create_directory('WALLET_DIR');
   ```

   자세한 내용은 [메인 데이터 스토리지 공간에서 디렉터리 생성 및 삭제](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.NewDirectories) 섹션을 참조하세요.

1. Amazon S3 버킷에 Oracle Wallet을 업로드합니다.

   지원되는 업로드 기술을 사용할 수 있습니다.

1. Oracle Wallet을 다시 업로드하는 경우 기존 Wallet을 삭제합니다. 그렇지 않은 경우 다음 단계로 건너뜁니다.

   다음 예에서는 *cwallet.sso*라는 기존 Wallet을 제거합니다.

   ```
   EXEC UTL_FILE.FREMOVE ('WALLET_DIR','cwallet.sso');
   ```

1. Amazon S3 버킷에서 Oracle DB 인스턴스로 Oracle Wallet을 다운로드합니다.

   다음 예에서는 *my\$1s3\$1bucket*이라는 Amazon S3 버킷에서 *WALLET\$1DIR*이라는 DB 인스턴스 디렉터리로 *cwallet.sso*라는 Wallet을 다운로드합니다.

   ```
   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;
   ```

1. (선택 사항) 암호로 보호된 Oracle Wallet을 다운로드합니다.

   Wallet을 사용할 때마다 암호를 요구하려는 경우에만 이 Wallet을 다운로드합니다. 다음 예에서는 암호로 보호된 Wallet *ewallet.p12*를 다운로드합니다.

   ```
   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;
   ```

1. DB 태스크의 상태를 확인합니다.

   다음 예에서 *dbtask-1234567890123-4567.log*를 이전 단계에서 반환된 태스크 ID로 대체합니다.

   ```
   SELECT TEXT FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1234567890123-4567.log'));
   ```

1. Oracle Wallet을 저장하는 데 사용하는 디렉터리의 내용을 확인합니다.

   ```
   SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'WALLET_DIR'));
   ```

   자세한 내용은 [DB 인스턴스 디렉터리의 파일 목록 표시](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.ListDirectories) 섹션을 참조하세요.

## 4단계: Oracle Wallet에 대한 사용자 권한 부여
<a name="config-oracle-wallet-user"></a>

새 데이터베이스 사용자를 생성하거나 기존 사용자를 구성할 수 있습니다. 두 경우 모두 인증서를 사용한 클라이언트 인증 및 보안 연결을 위해 Oracle Wallet에 액세스하도록 사용자를 구성해야 합니다.

**Oracle Wallet에 대한 사용자 권한 부여**

1. RDS for Oracle DB 인스턴스에 마스터 사용자로 로그인합니다.

1. 기존 데이터베이스 사용자를 구성하지 않으려는 경우 새 사용자를 생성합니다. 그렇지 않은 경우 다음 단계로 건너뜁니다.

   다음 예에서는 *my-user*라는 데이터베이스 사용자를 생성합니다.

   ```
   CREATE USER my-user IDENTIFIED BY my-user-pwd;
   GRANT CONNECT TO my-user;
   ```

1. 데이터베이스 사용자에게 Oracle Wallet이 포함된 디렉터리에 대한 권한을 부여합니다.

   다음 예에서는 사용자 *my-user* 에게 디렉터리 *WALLET\$1DIR*에 대한 읽기 액세스 권한을 부여합니다.

   ```
   GRANT READ ON DIRECTORY WALLET_DIR TO my-user;
   ```

1. 데이터베이스 사용자에게 `UTL_HTTP` 패키지를 사용할 수 있는 권한을 부여합니다.

   다음 PL/SQL 프로그램에서는 사용자 *my-user*에게 `UTL_HTTP` 액세스 권한을 부여합니다.

   ```
   BEGIN 
     rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('my-user')); 
     END;
   /
   ```

1. 데이터베이스 사용자에게 `UTL_FILE` 패키지를 사용할 수 있는 권한을 부여합니다.

   다음 PL/SQL 프로그램에서는 사용자 *my-user*에게 `UTL_FILE` 액세스 권한을 부여합니다.

   ```
   BEGIN 
     rdsadmin.rdsadmin_util.grant_sys_object('UTL_FILE', UPPER('my-user')); 
     END;
   /
   ```

## 5단계: DB 인스턴스에서 웹 사이트에 대한 액세스 구성
<a name="config-website-access"></a>

이 단계에서는 `UTL_HTTP`, 업로드한 Oracle Wallet 및 클라이언트 인증서를 사용하여 대상 웹 사이트에 연결할 수 있도록 Oracle 데이터베이스 사용자를 구성합니다. 자세한 내용은 Oracle Database 설명서의 [Configuring Access Control to an Oracle Wallet](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/managing-fine-grained-access-in-pl-sql-packages-and-types.html#GUID-0BCB5925-A40F-4507-95F9-5DA4A1919EBD)(Oracle Wallet에 대한 액세스 제어 구성)을 참조하세요.

**RDS for Oracle DB 인스턴스에서 웹 사이트에 대한 액세스 구성**

1. RDS for Oracle DB 인스턴스에 마스터 사용자로 로그인합니다.

1. 보안 포트에 사용자 및 대상 웹 사이트에 대한 ACE(Host Access Control Entry)를 생성합니다.

   다음 예에서는 보안 포트 443에서 *secret.encrypted-website.com*에 액세스하도록 *my-user*를 구성합니다.

   ```
   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;
   /
   ```
**중요**  
이전 프로그램 단위에서 다음 `PLS-00201: identifier 'XS_ACL' must be declared` 오류가 발생할 수 있습니다. 이 오류가 반환되면 값을 할당하는 줄을 다음 줄의 `principal_type`으로 바꾼 다음 프로그램 단위를 다시 실행하세요.  

   ```
   principal_type => 2));
   ```
PL/SQL 패키지 `XS_ACL`의 상수에 대한 자세한 내용은 Oracle Database 설명서의 [Real Application Security 관리자 및 개발자 안내서](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbfsg/XS_ACL-package.html#GUID-A157FB28-FE23-4D30-AAEB-8224230517E7)를 참조하세요.**

   자세한 내용은 Oracle Database 설명서의 [Configuring Access Control for External Network Services](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/managing-fine-grained-access-in-pl-sql-packages-and-types.html#GUID-3D5B66BC-0277-4887-9CD1-97DB44EB5213)(외부 네트워크 서비스에 대한 액세스 제어 구성)를 참조하세요.

1. (선택 사항) 표준 포트에서 사용자 및 대상 웹 사이트에 대한 ACE를 만듭니다.

   일부 웹 페이지가 보안 포트(443) 대신 표준 웹 서버 포트(80)에서 제공되는 경우 표준 포트를 사용해야 할 수 있습니다.

   ```
   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;
   /
   ```

1. 액세스 제어 항목이 있는지 확인합니다.

   ```
   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;
   ```

1. 데이터베이스 사용자에게 `UTL_HTTP` 패키지를 사용할 수 있는 권한을 부여합니다.

   다음 PL/SQL 프로그램에서는 사용자 *my-user*에게 `UTL_HTTP` 액세스 권한을 부여합니다.

   ```
   BEGIN 
     rdsadmin.rdsadmin_util.grant_sys_object('UTL_HTTP', UPPER('my-user')); 
     END;
   /
   ```

1. 관련 액세스 제어 목록이 있는지 확인합니다.

   ```
   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;
   ```

1. 데이터베이스 사용자에게 클라이언트 인증에 인증서를 사용하고 연결에 Oracle Wallet을 사용할 수 있는 권한을 부여합니다.
**참고**  
인증에 클라이언트 인증서를 사용하지 않는 경우 이 단계를 건너뛸 수 있습니다.

   ```
   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;
   /
   ```

## 6단계: DB 인스턴스에서 웹 사이트로의 연결 테스트
<a name="test_utl_http"></a>

이 단계에서는 `UTL_HTTP`, 업로드한 Oracle Wallet 및 클라이언트 인증서를 사용하여 웹 사이트에 연결할 수 있도록 데이터베이스 사용자를 구성합니다.

**RDS for Oracle DB 인스턴스에서 웹 사이트에 대한 액세스 구성**

1. `UTL_HTTP` 권한이 있는 데이터베이스 사용자로 RDS for Oracle DB 인스턴스에 로그인합니다.

1. 대상 웹 사이트에 대한 연결이 호스트 주소를 확인할 수 있는지 확인합니다.

   다음 예에서는 *secret.encrypted-website.com*에서 호스트 주소를 가져옵니다.

   ```
   SELECT UTL_INADDR.GET_HOST_ADDRESS(host => 'secret.encrypted-website.com')
     FROM DUAL;
   ```

1. 실패한 연결을 테스트합니다.

   `UTL_HTTP`는 인증서가 있는 Oracle Wallet의 위치를 요구하기 때문에 다음 쿼리는 실패합니다.

   ```
   SELECT UTL_HTTP.REQUEST('secret.encrypted-website.com') FROM DUAL;
   ```

1. `UTL_HTTP.SET_WALLET`을 사용하고 `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;
   ```

1. (선택 사항) 쿼리를 변수에 저장하고 `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;
   /
   ```

1. (선택 사항) Oracle Wallet 디렉터리의 파일 시스템 위치를 찾습니다.

   ```
   SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'WALLET_DIR'));
   ```

   이전 명령의 출력을 사용하여 HTTP 요청을 만듭니다. 예를 들어 디렉터리가 *rdsdbdata/userdirs/01*인 경우 다음 쿼리를 실행합니다.

   ```
   SELECT UTL_HTTP.REQUEST('https://secret.encrypted-website.com/', '', 'file://rdsdbdata/userdirs/01') 
   FROM   DUAL;
   ```