Actualización de aplicaciones para la conexión a los clústeres de base de datos de MySQL de Aurora con los nuevos certificados TLS - Amazon Aurora

Actualización de aplicaciones para la conexión a los clústeres de base de datos de MySQL de Aurora con los nuevos certificados TLS

El 13 de enero de 2023, Amazon RDS publicó nuevos certificados de entidades de certificación (CA) para la conexión a sus clústeres de base de datos de Aurora mediante la seguridad de la capa de transporte (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 las aplicaciones de cualquier cliente utilizan TLS para conectarse a sus clústeres de base de datos. Si lo hacen, puede comprobar de manera adicional si esas aplicaciones precisan una verificación de certificados para conectarse.

nota

Algunas aplicaciones están configuradas para conectarse a los clústeres de base de datos de MySQL de Aurora 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.

Después de que actualice sus certificados de CA en los almacenes de confianza de la aplicación de su cliente, puede rotar los certificados en sus clústeres 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 un clúster de base de datos. Para obtener información sobre el uso de TLS con los clústeres de base de datos de MySQL de Aurora, consulte Uso de TLS con clústeres de base de datos de Aurora MySQL.

Determinación de si alguna aplicación se conecta a su clúster de base de datos de MySQL de Aurora mediante TLS

Si utiliza la versión 2 de MySQL de Aurora (compatible con MySQL 5.7) y el esquema de rendimiento se activa, ejecute la siguiente consulta para comprobar si las conexiones utilizan TLS. Para obtener información sobre la habilitación del esquema de rendimiento, consulte Inicio rápido del esquema de rendimiento en la documentación de MySQL.

mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;

En estos resultados de ejemplo, puede ver que su propia sesión (admin) y una aplicación con sesión iniciada como webapp1 utilizan TLS.

+----+-----------------+------------------+-----------------+ | id | user | host | connection_type | +----+-----------------+------------------+-----------------+ | 8 | admin | 10.0.4.249:42590 | SSL/TLS | | 4 | event_scheduler | localhost | NULL | | 10 | webapp1 | 159.28.1.1:42189 | SSL/TLS | +----+-----------------+------------------+-----------------+ 3 rows in set (0.00 sec)

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 de TLS 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 TLS al conectarse a sus bases de datos, estos controladores cliente utilizan de forma predeterminada TLS. Además, al utilizar 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.

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 TLS 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 información sobre la actualización del almacén de confianza para las aplicaciones de MySQL, consulte Instalación de certificados de SSL en la documentación de MySQL.

nota

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

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

Puede actualizar el almacén de confianza para las aplicaciones que utilizan JDBC para las conexiones TLS.

Para obtener información sobre la descarga del certificado raíz, consulte Uso de SSL/TLS para cifrar una conexión a un clúster de base de datos.

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.

Si utiliza el controlador de JDBC de MySQL 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");
nota

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

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

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

El siguiente ejemplo de código muestra cómo configurar la conexión SSL que valida el certificado del servidor mediante JDBC.

public class MySQLSSLTest { 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 test(String[] args) throws Exception { Class.forName("com.mysql.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.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); Connection connection = DriverManager.getConnection("jdbc:mysql://jagdeeps-ssl-test.cni62e2e7kwh.us-east-1.rds.amazonaws.com:3306",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 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.