Configurar uma conexão SSL via JDBC - Amazon Relational Database Service

Configurar uma conexão SSL via JDBC

Para usar uma conexão SSL via JDBC, é necessário criar um repositório de chaves, confiar no certificado da CA raiz do Amazon RDS e usar o trecho de código especificado a seguir.

Para criar o repositório de chaves no formato JKS, é possível usar o comando a seguir. Para ter mais informações sobre como criar o repositório de chaves, consulte Creating a keystore na documentação da Oracle. Para ter informações de referência, consulte keytool na Java Platform, Standard Edition Tools Reference.

keytool -genkey -alias client -validity 365 -keyalg RSA -keystore clientkeystore

Siga estas etapas para confiar no certificado da CA raiz do Amazon RDS.

Para confiar no certificado da CA raiz do Amazon RDS
  1. Baixe o pacote do certificado .pem que funciona para todas as Regiões da AWS e coloque o arquivo no diretório ssl_wallet.

    Para obter informações sobre como baixar certificados, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.

  2. Extraia cada certificado no arquivo .pem em um arquivo separado usando um utilitário do sistema operacional.

  3. Converta cada certificado no formato .der usando um comando openssl separado, substituindo certificate-pem-file pelo nome do arquivo .pem do certificado (sem a extensão .pem).

    openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der
  4. Importe cada certificado para o repositório de chaves usando o comando a seguir.

    keytool -import -alias rds-root -keystore clientkeystore.jks -file certificate-pem-file.der

    Para ter mais informações, consulte Alternar o certificado SSL/TLS.

  5. Confirme se o armazenamento de chaves foi criado com êxito.

    keytool -list -v -keystore clientkeystore.jks

    Insira a senha do repositório de chaves quando solicitado.

O exemplo de código a seguir mostra como configurar a conexão SSL usando o JDBC.

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 } }
nota

Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.