Configurazione di una connessione SSL su JDBC - Amazon Relational Database Service

Configurazione di una connessione SSL su JDBC

Per utilizzare una connessione SSL su JDBC, devi creare un keystore, approvare il certificato CA root di Amazon RDS e utilizzare il frammento di codice specificato di seguito.

Per creare il keystore in formato JKS, puoi utilizzare il comando seguente. Per ulteriori informazioni sulla creazione del keystore, consulta Creating a keystore nella documentazione Oracle. Per informazioni di riferimento, vedi keytool nel riferimento strumenti della piattaforma Java, Standard Edition.

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

Esegui la procedura seguente per approvare il certificato CA root di Amazon RDS.

Per approvare il certificato CA root di Amazon RDS
  1. Scarica il file .pem del bundle di certificati che funziona per tutte le Regioni AWS e inseriscilo nella directory ssl_wallet.

    Per ulteriori informazioni sul download dei certificati, consultare Utilizzo di SSL/TLS per crittografare una connessione a un’istanza database o un cluster di database.

  2. Estrai ogni certificato nel file .pem in un file separato utilizzando un’utilità del sistema operativo.

  3. Converti ogni certificato in formato.der utilizzando un comando openssl separato, sostituendo certificate-pem-file con il nome del file .pem del certificato (senza l’estensione.pem).

    openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der
  4. Importa ogni certificato nel keystore utilizzando il comando seguente.

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

    Per ulteriori informazioni, consulta Rotazione del certificato SSL/TLS.

  5. Verificare che il keystore sia stato creato correttamente.

    keytool -list -v -keystore clientkeystore.jks

    Inserire la password del keystore quando richiesto.

L'esempio di codice seguente mostra come impostare la connessione SSL utilizzando 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

Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.