SSL 接続を使用して Amazon RDS for Oracle DB インスタンスに接続する方法を教えてください。

所要時間5分
0

Secure Socket Layer (SSL) 接続を使用して Oracle DB インスタンス用 Amazon Relational Database Service (Amazon RDS) に接続したいです。

簡単な説明

DB インスタンスをプロビジョニングすると、Amazon RDS は SSL 証明書を作成し、その証明書をインスタンスにインストールします。これらの証明書は、認証機関によって署名されています。SSL 証明書には、SSL 証明書の共通名として DB インスタンスエンドポイントが含まれています。これにより、インスタンスをなりすまし攻撃から保護できます。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 or 1.0 - クライアントは TLS 1.0 または 1.2 を使用して DB インスタンスに接続できます。

既存の Oracle SSL オプションでは、SQLNET.SSL_VERSION はデフォルトで 1.0 に設定されています。この設定は必要に応じて変更できます。

解決策

制限

同じ RDS for Oracle DB インスタンスで SSL またはネイティブネットワーク暗号化 (NNE) のいずれかを使用できますが、両方を使用することはできません。SSL 暗号化を使用する場合は、他の接続暗号化を必ず無効にしてください。詳細については、「Oracle ネイティブのネットワーク暗号化」を参照してください。

SSL オプションをオプショングループに追加する

カスタマーオプショングループに SSL オプションを追加して、RDS for Oracle DB インスタンスの SSL モードを有効にします。SSL モードを有効にするには、次の手順に従います。

  1. 新しいオプショングループを作成するか、SSL オプションを追加する既存のオプショングループを選択します。
  2. オプショングループに、SSL オプションを追加します。FIPS 検証済みの暗号スイートを SSL 接続にのみ使用する場合は、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 ファイルを更新する

次に、ネットワークディレクトリまたは管理者ディレクトリに移動します。sqlnet.ora ファイルと tnsnames.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!

sqlnet.ora ファイルを更新して、SLL 接続の更新された詳細を含めます。

[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 接続のトラブルシューティング

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ