JDBC を介した SSL 接続のセットアップ
JDBC を介した SSL 接続を使用するには、キーストアを作成して、Amazon RDS のルート CA 証明書を信頼し、以下で指定されるコードスニペットを使用する必要があります。
JKS 形式でキーストアを作成するには、次のコマンドを使用できます。キーストアの作成の詳細については、Oracle のドキュメントの「キーストアの作成
keytool -genkey -alias
client
-validity365
-keyalgRSA
-keystoreclientkeystore
Amazon RDS のルート CA 証明書を信頼するよう、以下のステップを実行します。
Amazon RDS ルート CA 証明書を信頼するには
-
すべての AWS リージョン で動作する証明書バンドルをダウンロードし、そのファイルを ssl_wallet ディレクトリに置きます。
証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。
-
OS ユーティリティを使用して、.pem ファイル内の各証明書を個別のファイルに抽出します。
-
certificate-pem-file
を証明書 .pem ファイルの名前 (.pem 拡張子なし) に置き換えて、個別のopenssl
コマンドを使用して各証明書を .der 形式に変換します。openssl x509 -outform der -in
certificate-pem-file
.pem -outcertificate-pem-file
.der -
次のコマンドを使用して、各証明書をキーストアにインポートします。
keytool -import -alias rds-root -keystore
clientkeystore.jks
-filecertificate-pem-file
.der詳細については、「SSL/TLS 証明書のローテーション」を参照してください。
-
キーストアが正常に作成されたことを確認します。
keytool -list -v -keystore
clientkeystore.jks
キーストアのパスワードを求められたら、これを入力します。
次のコード例は、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 } }
注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。