新しい SSL/TLS 証明書を使用して Oracle DB インスタンスに接続するようにアプリケーションを更新する
2023 年 1 月 13 日に Amazon RDS は、Secure Socket Layer または Transport Layer Security (SSL/TLS) を使用して RDS DB インスタンスに接続するための新しい認証局 (CA) 証明書を公開しました。ここでは、新しい証明書を使用するためのアプリケーションの更新について説明します。
このトピックでは、クライアントアプリケーションが SSL/TLS を使用して DB インスタンスに接続されているかどうかを判断できます。
重要
Amazon RDS for Oracle DB インスタンスの証明書を変更すると、データベースリスナーのみが再起動されます。DB インスタンスは再起動されません。既存のデータベース接続は影響を受けませんが、新しい接続ではリスナーが再起動されるまで短期間だけエラーが発生します。
注記
DB インスタンスに接続するために SSL/TLS を使用するクライアントアプリケーションの場合、新しい CA 証明書を含めるためにクライアントアプリケーション信頼ストアを更新する必要があります。
クライアントアプリケーションの信頼ストアで CA 証明書を更新した後、DB インスタンスで証明書をローテーションできます。これらの手順を開発環境またはステージング環境でテストしてから、本番環境で実装することを強くお勧めします。
証明書のローテーションの詳細については、「SSL/TLS 証明書のローテーション」を参照してください。証明書のダウンロードの詳細については、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。Oracle DB インスタンスで SSL/TLS を使用する方法については、「Oracle Secure Sockets Layer」を参照してください。
アプリケーションが SSL を使用して接続しているかどうかを調べる
Oracle DB インスタンスで SSL
オプションが追加されたオプショングループを使用する場合、SSL を使用している可能性があります。オプショングループのオプションとオプション設定をリスト化する の手順に従ってこれをチェックします。SSL
オプションの詳細については、「Oracle Secure Sockets Layer」を参照してください。
リスナーログをチェックして、SSL 接続があるかどうかを判断します。リスナーログのサンプル出力を次に示します。
date
time
* (CONNECT_DATA=(CID=(PROGRAM=program
) (HOST=host
)(USER=user
))(SID=sid
)) * (ADDRESS=(PROTOCOL=tcps)(HOST=host
)(PORT=port
)) * establish * ORCL * 0
PROTOCOL
にエントリの値 tcps
がある場合、SSL 接続を示します。ただし、HOST
が 127.0.0.1
である場合は、エントリを無視できます。127.0.0.1
からの接続は、DB インスタンス上のローカル管理エージェントです。これらの接続は外部 SSL 接続ではありません。そのため、PROTOCOL
が tcps
であり、HOST
が 127.0.0.1
ではないリスナーログエントリがある場合、SSL を使用して接続しているアプリケーションがあります。
リスナーログをチェックするには、ログを Amazon CloudWatch Logs に発行します。詳細については、「Amazon CloudWatch Logs への Oracle ログの発行」を参照してください。
アプリケーション信頼ストアの更新
SSL/TLS 接続に SQL*Plus または JDBC を使用するアプリケーションの信頼ストアを更新できます。
SQL*Plus のアプリケーション信頼ストアの更新
SSL/TLS 接続に SQL*Plus を使用するアプリケーションの信頼ストアを更新できます。
注記
信頼ストアを更新するとき、新しい証明書を追加できるだけでなく、古い証明書を保持できます。
SQL*Plus アプリケーションの信頼ストアを更新するには
-
すべての AWS リージョンで動作する新しいルート証明書をダウンロードし、そのファイルを
ssl_wallet
ディレクトリに置きます。ルート証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。
-
以下のコマンドを実行して Oracle Wallet を更新します。
prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/
ssl-cert.pem
-auto_login_onlyファイル名を、ダウンロードしたファイル名に置き換えます。
-
次のコマンドを実行して、ウォレットが正しく更新されていることを確認します。
prompt>orapki wallet display -wallet $ORACLE_HOME/ssl_wallet
出力には次の内容が含まれている必要があります。
Trusted Certificates: Subject: CN=Amazon RDS Root 2019 CA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,L=Seattle,ST=Washington,C=US
JDBC のアプリケーション信頼ストアの更新
SSL/TLS 接続に JDBC を使用するアプリケーションの信頼ストアを更新できます。
ルート証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。
証明書をインポートするサンプルスクリプトについては、証明書を信頼ストアにインポートするためのサンプルスクリプト を参照してください。
SSL 接続を確立するための Java コードの例
次のコード例は、JDBC を使用する SSL 接続のセットアップ方法を示します。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "<dns-name-provided-by-amazon-rds>"; private static final Integer SSL_PORT = "<ssl-option-port-configured-in-option-group>"; private static final String DB_SID = "<oracle-sid>"; private static final String DB_USER = "<user name>"; private static final String DB_PASSWORD = "<password>"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "<file-path-to-keystore>"; private static final String KEY_STORE_PASS = "<keystore-password>"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }
重要
データベース接続で SSL/TLS を使用することを決定し、アプリケーションの信頼ストアを更新したら、rds-ca-rsa2048-g1 証明書を使用するようにデータベースを更新できます。ステップについては、「DB インスタンスまたはクラスターの変更による CA 証明書の更新」のステップ 3 を参照してください。