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
keytool -genkey -alias
client
-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 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
openssl
independiente y sustituyacertificate-pem-file
por el nombre del archivo .pem del certificado (sin la extensión .pem).openssl x509 -outform der -in
certificate-pem-file
.pem -outcertificate-pem-file
.der -
Importe cada certificado al almacén de claves utilizando el siguiente comando.
keytool -import -alias rds-root -keystore
clientkeystore.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 -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.