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 obtener más información acerca de la creación del almacén de claves, consulte Creating a keystore
keytool -genkey -aliasclient-validity365-keyalgRSA-keystoreclientkeystore
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
-
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 un clúster de base de datos.
-
Extraiga cada certificado del archivo .pem en un archivo independiente mediante una utilidad del sistema operativo.
-
Convierta cada certificado al formato .der mediante un comando
opensslindependiente y sustituyacertificate-pem-filepor el nombre del archivo .pem del certificado (sin la extensión .pem).openssl x509 -outform der -incertificate-pem-file.pem -outcertificate-pem-file.der -
Importe cada certificado al almacén de claves utilizando el siguiente comando.
keytool -import -alias rds-root -keystoreclientkeystore.jks-filecertificate-pem-file.derPara obtener más información, consulte Rotar certificados SSL/TLS.
-
Confirme que el almacén de claves se haya creado correctamente.
keytool -list -v -keystoreclientkeystore.jksEspecifique 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 String 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=%s))(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.