AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

SSL 연결을 사용하여 Amazon RDS for Oracle DB 인스턴스에 연결하려면 어떻게 해야 합니까?

6분 분량
0

Secure Socket Layer(SSL) 연결을 사용하여 Amazon Relational Database Service(Amazon RDS) for Oracle DB 인스턴스에 연결하려고 합니다.

간략한 설명

DB 인스턴스를 프로비저닝하면 Amazon RDS가 SSL 인증서를 생성한 다음, 인스턴스에 해당 인증서를 설치합니다. 이러한 인증서는 인증 기관에서 서명합니다. SSL 인증서에는 DB 인스턴스 엔드포인트가 SSL 인증서의 일반 이름으로 포함됩니다. 이를 통해 스푸핑 공격으로부터 인스턴스를 보호할 수 있습니다. Amazon RDS에서 생성한 SSL 인증서는 신뢰할 수 있는 루트 엔티티이며 대부분의 일반적인 사용 사례에서 작동합니다.

Amazon RDS for Oracle은 Transport Layer Security(TLS) 버전 1.0 및 1.2를 지원합니다. Oracle SSL 옵션을 사용하려면 옵션 그룹에서 SQLNET.SSL_VERSION 옵션 설정을 사용하십시오. 이 옵션 설정에는 다음과 같은 값이 허용됩니다.

  • 1.0 - 클라이언트가 TLS 1.0만 사용하여 DB 인스턴스에 연결할 수 있습니다.
  • 1.2 - 클라이언트가 TLS 1.2만 사용하여 DB 인스턴스에 연결할 수 있습니다.
  • 1.2 또는 1.0 - 클라이언트가 TLS 1.0 또는 1.2를 사용하여 DB 인스턴스에 연결할 수 있습니다.

기존 Oracle SSL 옵션의 경우 SQLNET.SSL_VERSION은 기본적으로 “1.0"으로 설정됩니다. 필요한 경우 이 설정을 변경할 수 있습니다.

해결 방법

제한 사항

동일한 RDS for Oracle DB 인스턴스에서 SSL 또는 Native Network Encryption(NNE) 중 하나를 사용할 수 있지만 둘 모두 사용할 수는 없습니다. SSL 암호화를 사용하는 경우 다른 모든 연결 암호화를 해제해야 합니다. 자세한 내용은 Oracle Native Network Encryption을 참조하십시오.

옵션 그룹에 SSL 옵션 추가

고객 옵션 그룹에 SSL 옵션을 추가하여 RDS for Oracle DB 인스턴스의 SSL 모드를 활성화하십시오. 다음 단계를 사용하여 SSL 모드를 활성화하십시오.

  1. 새 옵션 그룹을 생성하거나 SSL 옵션을 추가할 기존 옵션 그룹을 선택합니다.
  2. 옵션 그룹에 SSL 옵션을 추가합니다. SSL 연결에만 FIPS 검증 암호 집합을 사용하려면 FIPS.SSLFIPS_140 옵션을 TRUE로 설정하십시오.
  3. 새 RDS for Oracle DB 인스턴스를 생성하고 옵션 그룹을 해당 인스턴스와 연결합니다. 또는 RDS for Oracle DB 인스턴스를 수정하여 옵션 그룹을 해당 인스턴스와 연결하십시오.

orapki를 사용하여 클라이언트에서 지갑 설정

클라이언트에서 ORACLE_HOME 환경 변수를 Oracle 홈 디렉터리 위치로 설정하십시오.

  1. 클라이언트 디렉터리로 이동합니다.

    $ cd app/client/product/19.0.0/client_1
  2. 경로를 확인합니다.

    [client_1]$ pwd
    /home/ec2-user/app/client/product/19.0.0/client_1
  3. Oracle의 경로를 설정합니다.

    [client_1]$ export ORACLE_HOME=/home/ec2-user/app/client/product/19.0.0/client_1
  4. &ORACLE_HOME/lib를 LD_LIBRARY_PATH 환경 변수에 추가합니다.

    [client_1]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  5. 지갑 디렉터리를 생성합니다.

    [client_1]$ mkdir $ORACLE_HOME/ssl_wallet
  6. 새로 생성된 디렉터리로 이동합니다.

    [client_1]$ cd ssl_wallet
  7. 인증서 번들을 다운로드합니다.

    [ssl_wallet]$ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
    --2023-08-15 15:20:05-- https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
    Resolving http://truststore.pki.rds.amazonaws.com (http://truststore.pki.rds.amazonaws.com)... 18.165.98.84, 18.165.98.93, 18.165.98.125, ...
    Connecting to http://truststore.pki.rds.amazonaws.com (http://truststore.pki.rds.amazonaws.com)|18.165.98.84|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 178780 (175K) [application/octet-stream]
    Saving to: 'global-bundle.pem'
    
    100%[==============================================================================>] 178,780 --.-K/s in 0.002s
    
    2023-08-15 15:20:05 (80.1 MB/s) - 'global-bundle.pem' saved [178780/178780]
  8. 지갑을 생성합니다.

    [ssl_wallet]$ orapki wallet create -wallet . -auto_login_only
    Oracle PKI Tool Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
    Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Operation is successfully completed.
  9. 다운로드한 인증서를 지갑 파일에 추가합니다.

글로벌 또는 리전별 인증서 번들 PEM 파일 다운로드

다음으로, RDS for Oracle 데이터베이스에 연결할 때 사용할 인증서 번들을 다운로드해야 합니다. 자세한 내용은 특정 AWS 리전의 인증서 번들을 참조하십시오.

Oracle의 wallet orapki 함수는 PEM 번들 파일에서만 초기 인증서를 가져올 수 있습니다. 따라서 PEM 파일이 여러 개 포함된 번들은 지갑으로 가져올 수 없습니다. 인증서(rds-ca-rsa2048-g1, rds-ca-rsa4096-g1) 중 하나에 대해 SSL 연결을 활성화하려면 개별 루트를 AWS 리전별 PEM 파일에서 분리해야 합니다.

PEM 파일을 분할하려면 다음 방법을 사용하십시오.

cat us-east-1-bundle.pem |awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'

[oracle@ip-***-**-**-*** wallet]$ ls -lrt
total 28
-rw-r--r--. 1 oracle oinstall 7488 May 25  2021 us-east-1-bundle.pem
-rw-r--r--. 1 oracle oinstall 1456 Sep 16 05:41 cert.pem
-rw-r--r--. 1 oracle oinstall  989 Sep 16 05:41 cert4.pem
-rw-r--r--. 1 oracle oinstall 2139 Sep 16 05:41 cert3.pem
-rw-r--r--. 1 oracle oinstall 1448 Sep 16 05:41 cert2.pem
-rw-r--r--. 1 oracle oinstall 1456 Sep 16 05:41 cert1.pem

그런 다음, 모든 PEM 파일을 지갑에 추가합니다. 어떤 PEM 파일이 각 인증서에 속하는지 모르므로 모든 PEM 파일을 지갑에 추가합니다.

orapki wallet add -wallet /data/wallet -trusted_cert -cert cert.pem -auto_login_only
orapki wallet add -wallet /data/wallet -trusted_cert -cert cert1.pem -auto_login_only
orapki wallet add -wallet /data/wallet -trusted_cert -cert cert2.pem -auto_login_only
orapki wallet add -wallet /data/wallet -trusted_cert -cert cert3.pem -auto_login_only
orapki wallet add -wallet /data/wallet -trusted_cert -cert cert4.pem -auto_login_only

openssl을 사용하여 루트 인증서 파일만 다운로드

openssl을 사용하여 루트 인증서 파일만 다운로드할 수도 있습니다. Red Hat Linux 서버에서 다음 명령을 실행합니다.

openssl s_client -connect user.ckyx0wdxr13x.us-east-1.rds.amazonaws.com:2484 -showcerts </dev/null 2>/dev/null | sed -n '/s:C = US.*Root/,$p' | sed -n '/BEGIN CERT/,/END CERT/p'> root.pem

이 명령을 실행한 후 생성된 파일(root.pem)을 Oracle 지갑에 추가할 수 있습니다. 다음 예를 참조하십시오.

-----BEGIN CERTIFICATE-----
MIID/zCCAuegAwIBAgIRAPVSMfFitmM5PhmbaOFoGfUwDQYJKoZIhvcNAQELBQAw
gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ
bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn
QW1hem9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH
DAdTZWF0dGxlMCAXDTIxMDUyNTIyMzQ1N1oYDzIwNjEwNTI1MjMzNDU3WjCBlzEL
MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x
EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6
b24gUkRTIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl
YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDu9H7TBeGoDzMr
dxN6H8COntJX4IR6dbyhnj5qMD4xl/IWvp50lt0VpmMd+z2PNZzx8RazeGC5IniV
5nrLg0AKWRQ2A/lGGXbUrGXCSe09brMQCxWBSIYe1WZZ1iU1IJ/6Bp4D2YEHpXrW
bPkOq5x3YPcsoitgm1Xh8ygz6vb7PsvJvPbvRMnkDg5IqEThapPjmKb8ZJWyEFEE
QRrkCIRueB1EqQtJw0fvP4PKDlCJAKBEs/y049FoOqYpT3pRy0WKqPhWve+hScMd
6obq8kxTFy1IHACjHc51nrGII5Bt76/MpTWhnJIJrCnq1/Uc3Qs8IVeb+sLaFC8K
DI69Sw6bAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE7PCopt
lyOgtXX0Y1lObBUxuKaCMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC
AQEAFj+bX8gLmMNefr5jRJfHjrL3iuZCjf7YEZgn89pS4z8408mjj9z6Q5D1H7yS
jNETVV8QaJip1qyhh5gRzRaArgGAYvi2/r0zPsy+Tgf7v1KGL5Lh8NT8iCEGGXwF
g3Ir+Nl3e+9XUp0eyyzBIjHtjLBm6yy8rGk9p6OtFDQnKF5OxwbAgip42CD75r/q
p421maEDDvvRFR4D+99JZxgAYDBGqRRceUoe16qDzbMvlz0A9paCZFclxeftAxv6
QlR5rItMz/XdzpBJUpYhdzM0gCzAzdQuVO5tjJxmXhkSMcDP+8Q+Uv6FA9k2VpUV
E/O5jgpqUJJ2Hc/5rs9VkAPXeA==
-----END CERTIFICATE-----
orapki wallet add -wallet /data/wallet -trusted_cert -cert test.pem -auto_login_only
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Operation is successfully completed.
[oracle@ip-***-**-**-***  pem]$ orapki wallet display -wallet /data/wallet
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Trusted Certificates:
Subject:        L=Seattle,CN=Amazon RDS us-east-1 Root CA RSA2048 G1,ST=WA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,C=US
[oracle@ip-172-31-19-245 pem]$ orapki cert display -cert test.pem
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Subject:        L=Seattle,CN=Amazon RDS us-east-1 Root CA RSA2048 G1,ST=WA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,C=US
Issuer:         L=Seattle,CN=Amazon RDS us-east-1 Root CA RSA2048 G1,ST=WA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,C=US
Valid Until:    Wed May 25 23:34:57 UTC 2061

[oracle@ip-***-**-**-***  admin]$ sqlplus admin/*******@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=user.ckyx0wdxr13x.us-east-1.rds.amazonaws.com)(PORT=2484))(CONNECT_DATA=(SID=USER)))'

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Sep 17 07:12:34 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Sun Sep 17 2023 06:07:26 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.20.0.0.0

SQL> SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;

SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
--------------------------------------------------------------------------------
tcps

sqlnet.ora 및 tnsnames.ora 파일 업데이트

다음으로, network 또는 admin 디렉터리로 이동합니다. sqlnet.oratnsnames.ora 파일을 찾은 후 적절하게 업데이트하십시오. tnsnames.ora가 없는 경우 다음 방법을 사용하여 생성하십시오.

[~]$ cd app/client/product/19.0.0/client_1/network/admin
[admin]$ cat > tnsnames.ora
net_service_name =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS =
         (PROTOCOL = TCPS)
         (HOST = user.ckyx0wdxr13x.us-east-1.rds.amazonaws.com)
         (PORT = 2484)
       )
    )
     (CONNECT_DATA =
      (SID = ORCL)
    )
    (SECURITY =
      (SSL_SERVER_CERT_DN = "C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=endpoint")
    )
  )
:wq!

SLL 연결에 대해 업데이트된 세부 정보를 포함하도록 sqlnet.ora 파일을 업데이트합니다.

[admin]$ vi sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /data/wallet)))
SSL_CLIENT_AUTHENTICATION = TRUE
SSL_VERSION = 1.0
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
SSL_SERVER_DN_MATCH = ON
:wq!

SSL 옵션을 사용하여 RDS for Oracle DB 인스턴스 연결

SSL을 사용하도록 SQL*Plus를 구성한 후 SSL 옵션을 사용하여 RDS for Oracle DB 인스턴스에 연결할 수 있습니다. 또는 연결하기 전에 tnsnames.ora 및 sqlnet.ora 파일이 포함된 디렉터리를 가리키는 TNS_ADMIN 값을 내보낼 수 있습니다. 이를 통해 SQL*Plus가 파일을 일관되게 찾을 수 있습니다. TNS_ADMIN 값을 내보내는 다음 예제 명령을 참조하십시오.

[client_1]$export TNS_ADMIN = ${ORACLE_HOME}/network/admin

참고: SSL을 사용하여 DB 인스턴스에 연결하기 전에 다음을 확인하십시오.

  • RDS 루트 인증서가 다운로드되어 지갑 파일에 추가되었습니다.
  • TNS 항목에 올바른 SSL 포트 번호가 있습니다.
  • Amazon RDS 보안 그룹이 SSL 포트를 통해 시스템으로부터의 인바운드 연결을 허용하도록 구성되어 있습니다.
  • 방화벽 또는 보안 정책이 Amazon RDS의 SSL 포트에서 트래픽을 허용하도록 적절하게 구성되어 있습니다.

관련 정보

JDBC를 통한 SSL 연결 설정

새 SSL/TLS 인증서를 사용하여 Oracle DB 인스턴스에 연결하도록 애플리케이션 업데이트

SSL 연결 문제 해결