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
keytool -genkey -aliasclient-validity365-keyalgRSA-keystoreclientkeystore
Esegui la procedura seguente per approvare il certificato CA root di Amazon RDS.
Per approvare il certificato CA root di Amazon RDS
-
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.
-
Estrai ogni certificato nel file .pem in un file separato utilizzando un’utilità del sistema operativo.
-
Converti ogni certificato in formato.der utilizzando un comando
opensslseparato, sostituendocertificate-pem-filecon il nome del file .pem del certificato (senza l’estensione.pem).openssl x509 -outform der -incertificate-pem-file.pem -outcertificate-pem-file.der -
Importa ogni certificato nel keystore utilizzando il comando seguente.
keytool -import -alias rds-root -keystoreclientkeystore.jks-filecertificate-pem-file.derPer ulteriori informazioni, consulta Rotazione del certificato SSL/TLS.
-
Verificare che il keystore sia stato creato correttamente.
keytool -list -v -keystoreclientkeystore.jksInserire 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.