Configuración de una conexión SSL a través de JDBC - Amazon Relational Database Service

Configuración de una conexión SSL a través de JDBC

Para utilizar una conexión SSL a través de JDBC, debe crear un almacén de claves, confiar en el certificado de CA raíz de Amazon RDS y utilizar el siguiente fragmento de código especificado.

Para crear el almacén de claves con formato JKS, puede utilizar el siguiente comando. Para obtener más información acerca de la creación del almacén de claves, consulte Creating a keystore en la documentación de Oracle. Para obtener información de referencia, consulte keytool en la Referencia de herramientas de la plataforma Java, edición estándar.

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

Siga estos pasos para confiar en el certificado de CA raíz de Amazon RDS.

Para confiar en el certificado de CA raíz de Amazon RDS
  1. Descargue el archivo de paquete de certificados .pem que funciona con todas las Regiones de AWS y coloque el archivo en el directorio ssl_wallet.

    Para obtener más información acerca de cómo descargar certificados, consulte Uso de SSL/TLS para cifrar una conexión a una instancia o clúster de base de datos.

  2. Extraiga cada certificado del archivo .pem en un archivo independiente mediante una utilidad del sistema operativo.

  3. Convierta cada certificado al formato .der mediante un comando openssl independiente y sustituya certificate-pem-file por el nombre del archivo .pem del certificado (sin la extensión .pem).

    openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der
  4. Importe cada certificado al almacén de claves utilizando el siguiente comando.

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

    Para obtener más información, consulte Rotar certificados SSL/TLS.

  5. Confirme que el almacén de claves se haya creado correctamente.

    keytool -list -v -keystore clientkeystore.jks

    Especifique la contraseña del almacén de claves cuando se le solicite.

El siguiente ejemplo de código muestra cómo configurar la conexión SSL mediante 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 una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.