Actualización de aplicaciones para la conexión a las instancias de MariaDB con los nuevos certificados SSL/TLS - Amazon Relational Database Service

Actualización de aplicaciones para la conexión a las instancias de MariaDB con los nuevos certificados SSL/TLS

El 13 de enero de 2023, Amazon RDS publicó nuevos certificados de entidades de certificación (CA) para la conexión a sus instancias de base de datos de RDS mediante la capa de sockets seguros o seguridad de la capa de transporte (SSL/TLS). Después, puede encontrar la información sobre la actualización de sus aplicaciones para utilizar los nuevos certificados.

Este tema puede ayudarle a determinar si sus aplicaciones precisan una verificación de certificados para conectarse a sus instancias de base de datos.

nota

Algunas aplicaciones solo están configuradas para conectarse a MariaDB solo si pueden verificar con éxito el certificado del servidor. Para esas aplicaciones, debe actualizar los almacenes de confianza de la aplicación de su cliente para incluir los nuevos certificados de CA.

Puede especificar los siguientes modos SSL: disabled, preferred y required. Cuando utiliza el modo SSL preferred y el certificado de CA no existe o no está actualizado, la conexión vuelve a no utilizar SSL y se sigue conectando correctamente.

Recomendamos evitar el modo preferred. En modo preferred, si la conexión encuentra un certificado no válido, deja de usar el cifrado y continúa sin cifrar.

Después actualizar sus certificados de CA en los almacenes de confianza de la aplicación de su cliente, puede rotar los certificados en sus instancias de base de datos. Recomendamos encarecidamente probar estos procedimientos en un entorno de desarrollo o ensayo antes de implementarlos en sus entornos de producción.

Para obtener más información acerca de la rotación de certificados, consulte Rotar certificados SSL/TLS. 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. Para obtener información sobre el uso de SSL/TLS con las instancias de base de datos de MariaDB, consulte Uso de SSL/TLS con una instancia de base de datos MariaDB.

Determinación de si un cliente necesita una verificación de certificados para conectarse

Puede comprobar si los cliente de JDBC y MySQL precisan la verificación de certificados para conectarse.

JDBC

El siguiente ejemplo con el conector de MySQL/J 8.0 muestra una manera de comprobar las propiedades de conexión de JDBC de una aplicación para determinar si las conexiones exitosas precisan un certificado válido. Para obtener más información sobre todas las opciones de conexión de JDBC para MySQL, consulte Propiedades de la configuración en la documentación de MySQL.

Al utilizar el conector de MySQL/J 8.0, una conexión precisa una verificación frente al certificado de CA del servidor si sus propiedades de conexión han configurado sslMode como VERIFY_CA o VERIFY_IDENTITY, como en el siguiente ejemplo.

Properties properties = new Properties(); properties.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD);
nota

Si utiliza MySQL Java Connector v5.1.38 o posterior, o MySQL Java Connector v8.0.9 o posterior para conectarse a sus bases de datos, incluso si no ha configurado explícitamente sus aplicaciones para usar SSL/TLS al conectarse a sus bases de datos, estos controladores cliente utilizan de forma predeterminada SSL/TLS. Además, al utilizar SSL/TLS, realizan una verificación parcial del certificado y producen un error al conectarse si el certificado del servidor de base de datos ha caducado.

Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

MySQL

Los siguientes ejemplos con el cliente de MySQL muestran dos maneras de comprobar la conexión a MySQL de un script para determinar si las conexiones exitosas precisan un certificado válido. Para obtener más información sobre todas las opciones de conexión con el cliente de MySQL, consulte Configuración del lado del cliente para las conexiones cifradas en la documentación de MySQL.

Al utilizar el cliente de MySQL 5.7 o 8.0, una conexión SSL precisa una verificación frente al certificado de CA del servidor si para la opción de --ssl-mode especifica VERIFY_CA o VERIFY_IDENTITY, como en el siguiente ejemplo.

mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-mode=VERIFY_CA

Al utilizar el cliente de MySQL 5.6, una conexión SSL precisa una verificación frente al certificado de CA del servidor si especifica la opción --ssl-verify-server-cert, como en el siguiente ejemplo.

mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-verify-server-cert

Actualización del almacén de confianza de su aplicación

Para obtener más información acerca de la actualización del almacén de confianza para las aplicaciones de MySQL, consulte Uso de TLS/SSL con MariaDB Connector/J en la documentación de MariaDB.

Para obtener información sobre la descarga del certificado raíz, consulte Uso de SSL/TLS para cifrar una conexión a una instancia.

Para obtener secuencias de comandos de ejemplo que importan certificados, consulte Script de muestra para la importación de certificados en su almacén de confianza.

nota

Cuando actualice el almacén de confianza, puede retener certificados antiguos además de añadir los nuevos certificados.

Si utiliza el controlador de MariaDB Connector/J JDBC en una aplicación, establezca las siguientes propiedades en la aplicación.

System.setProperty("javax.net.ssl.trustStore", certs); System.setProperty("javax.net.ssl.trustStorePassword", "password");

Cuando inicie la aplicación, establezca las siguientes propiedades.

java -Djavax.net.ssl.trustStore=/path_to_truststore/MyTruststore.jks -Djavax.net.ssl.trustStorePassword=my_truststore_password com.companyName.MyApplication
nota

Especifique contraseñas distintas de las que se muestran aquí como práctica recomendada de seguridad.

Ejemplo de código Java para el establecimiento de conexiones SSL

El siguiente ejemplo de código muestra cómo configurar la conexión SSL mediante JDBC.

private static final String DB_USER = "admin"; 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 Exception { Class.forName("org.mariadb.jdbc.Driver"); System.setProperty("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); System.setProperty("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); Properties properties = new Properties(); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); Connection connection = DriverManager.getConnection("jdbc:mysql://ssl-mariadb-public.cni62e2e7kwh.us-east-1.rds.amazonaws.com:3306?useSSL=true",properties); Statement stmt=connection.createStatement(); ResultSet rs=stmt.executeQuery("SELECT 1 from dual"); return; }
importante

Después de que haya determinado que sus conexiones de base de datos utilizan SSL/TLS y haya actualizado el almacén de confianza de su aplicación, puede actualizar su base de datos para que utilice los certificados de rds-ca-rsa2048-g1. Para obtener instrucciones, consulte el paso 3 en Actualización del certificado de entidad de certificación modificando la instancia de base de datos.

Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.