Para mejorar la seguridad de los datos en tránsito, habilite el cifrado Secure Sockets Layer (SSL) e instale un certificado de CA en sus servicios de aplicación. SSL cifra las conexiones de red en la capa de transporte para mejorar la seguridad y la integridad de los datos, aunque esto puede aumentar la latencia de conexión.
Contexto
SSL es un protocolo de seguridad que Netscape desarrolló originalmente para crear un canal seguro de transmisión de datos entre un navegador web y un servidor web. Utiliza algoritmos de cifrado como RC4, MD5 y RSA para proteger las comunicaciones. Internet Engineering Task Force (IETF) estandarizó SSL 3.0 y lo renombró como Transport Layer Security (TLS). Aunque SSL es el término más común, este documento se refiere al cifrado TLS cuando habla del cifrado SSL.
Escenarios
Acceso a una base de datos a través de internet público: Cuando un cliente se conecta a un clúster de PolarDB por internet público, el enlace de datos queda expuesto a una red no confiable. El cifrado es necesario para evitar ataques de intermediario (man-in-the-middle).
Cumplimiento de requisitos de seguridad y normativos: Ciertas regulaciones de la industria o de protección de datos, como PCI-DSS y GDPR, exigen cifrar los datos confidenciales en tránsito.
Comunicación entre distintos entornos de red: En una arquitectura de nube híbrida o con varias VPC, los flujos de datos que cruzan límites de red requieren cifrado SSL para garantizar su confidencialidad e integridad.
Límites
Cifrado de un solo endpoint: Cada clúster admite cifrado SSL únicamente para un endpoint a la vez. Si su clúster tiene configurados un endpoint público y uno interno, debe elegir cuál cifrar según su escenario de negocio.
-
Recomendaciones para elegir el endpoint que se va a cifrar:
Si accede a la base de datos por internet público, se recomienda habilitar el cifrado SSL en el endpoint público para proteger los datos en tránsito.
Si accede a la base de datos solo desde dentro de una VPC y necesita cumplir requisitos de seguridad y normativos, se recomienda habilitar el cifrado SSL en el endpoint interno.
Límite de longitud del endpoint: Un endpoint de PolarDB con cifrado SSL habilitado debe tener menos de 64 caracteres. Para obtener información sobre cómo modificar un endpoint, consulte Configure PolarProxy.
Importante
Periodo de validez del certificado: Los certificados SSL tienen un periodo de validez de un año que no se puede extender. Debe update the validity period y luego descargar y configurar de nuevo el certificado de CA antes de que caduque. De lo contrario, las conexiones cifradas de los clientes fallarán. Se recomienda habilitar automatic certificate rotation para evitar actualizar el certificado manualmente.
Interrupciones del servicio: Las siguientes acciones reinician el clúster: enabling o disabling el cifrado SSL, updating the certificate validity period, modifying the protected endpoint y habilitar automatic certificate rotation. Se recomienda ejecutar estas operaciones fuera del horario de mayor actividad y asegurarse de que su aplicación pueda reconectarse automáticamente.
Procedimiento
Paso 1: Habilitar el cifrado SSL
Habilitar el cifrado SSL reinicia el clúster. Se recomienda ejecutar esta operación fuera del horario de mayor actividad.
Inicie sesión en la consola de PolarDB. En el panel de navegación izquierdo, haga clic en Clusters. Seleccione la región donde se encuentra su clúster y luego haga clic en el ID del clúster.
En el panel de navegación izquierdo, elija .
-
En la pestaña SSL Settings, active el interruptor SSL Status para habilitar el cifrado SSL.
NotaSe puede configurar SSL para endpoints primarios, de clúster y personalizados.
En el cuadro de diálogo Configure SSL, seleccione el endpoint que desea cifrar y luego haga clic en OK.
Paso 2: Descargar el certificado
Una vez habilitado el cifrado SSL, descargue el certificado del clúster de PolarDB para verificar la autenticidad de la base de datos cuando un cliente se conecte de forma remota al clúster de PolarDB.
En la pestaña SSL Settings, haga clic en Download en la sección del endpoint deseado.
-
El archivo descargado es un paquete comprimido que contiene los tres archivos siguientes:
Archivo .p7b: Para importar el certificado de CA en Windows.
Archivo .pem: Para importar el certificado de CA en otros sistemas o aplicaciones.
-
Archivo .jks: Archivo de certificado de almacén de confianza de Java, con la contraseña
apsaradb, para importar la cadena de certificados de CA en aplicaciones Java.NotaCuando utilice el archivo de certificado JKS en Java, debe modificar la configuración de seguridad predeterminada de JDK 7 y JDK 8. En el servidor que se conecta a la base de datos de PolarDB, edite el archivo
jre/lib/security/java.securityy modifique los dos parámetros siguientes:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024Si no modifica la configuración de seguridad de JDK, puede producirse un error similar al siguiente. Este y otros errores relacionados suelen deberse a una configuración de seguridad de Java incorrecta.
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
Paso 3: Conectarse a PolarDB desde un cliente
Después de habilitar el cifrado SSL, el hecho de que la conexión entre un cliente y el clúster de PolarDB esté cifrada depende del tipo y la configuración del cliente. Por ejemplo, algunos clientes usan conexiones cifradas de forma predeterminada. Modifique la configuración o el código del cliente para establecer una conexión cifrada y verificar la identidad del clúster de PolarDB.
Si utiliza Data Management (DMS) para iniciar sesión y gestionar clústeres de PolarDB, no es necesario cifrar la conexión.
CLI
Para clientes MySQL versión 5.7.11 y posteriores, use la opción --ssl-mode en el comando de conexión para configurar el cifrado SSL.
--ssl-mode=DISABLED: La conexión no está cifrada.--ssl-mode=PREFERREDu omitir la opción--ssl-mode: Intenta establecer una conexión cifrada. Si falla, establece una conexión sin cifrar.--ssl-mode=REQUIRED: Exige una conexión cifrada. La conexión falla si no se logra establecer una cifrada.--ssl-mode=VERIFY_CA: Exige una conexión cifrada y verifica el certificado del servidor con el certificado de CA local.--ssl-mode=VERIFY_IDENTITY: Exige una conexión cifrada, verifica el certificado del servidor con el certificado de CA local y comprueba que el nombre de host o la dirección IP del servidor coincida con el utilizado para la conexión.
Ejemplo 1: Intentar establecer una conexión cifrada y recurrir a una sin cifrar si falla.
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERRED
Ejemplo 2: Exigir una conexión cifrada y verificar el certificado del servidor.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={CA certificate path}/ApsaraDB-CA-Chain.pem
Reemplace
{endpoint},{username}y{CA certificate path}con sus valores reales.Para obtener más información sobre la opción
--ssl-mode, consulte la documentación de MySQL.
MySQL Workbench
Abra MySQL Workbench y seleccione Database > Manage Connections.
Introduzca el endpoint, el nombre de usuario y la contraseña de PolarDB.
-
En la pestaña SSL, establezca el parámetro Use SSL, configure SSL CA File con la ruta del certificado de CA en formato PEM que descargó y luego haga clic en Test Connection o OK.
NotaPara conocer el significado de las opciones de Use SSL, consulte la descripción de la opción --ssl-mode para conexiones por línea de comandos.
Código de aplicación
Java
Connector/J (mysql-connector-java) es el controlador JDBC oficial para MySQL. Este ejemplo usa mysql-connector-java versión 8.0.19 como dependencia.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
El siguiente código de ejemplo usa la propiedad sslMode para especificar el modo SSL. Esta propiedad es compatible con las versiones 8.0.13 y posteriores de mysql-connector-java. Si utiliza una versión anterior, debe usar las propiedades useSSL, requireSSL y verifyServerCertificate. Para más detalles, consulte la documentación de MySQL.
Código de ejemplo:
package com.example.ssltest;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS=null;
try{
mysqlDS = new MysqlDataSource();
// Set SslMode as needed. For options, see the command-line connection instructions.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// The truststore contains the CA certificate. Set the truststore type to JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Replace the path after file:/ with the path to your ApsaraDB-CA-Chain.jks file.
mysqlDS.setTrustCertificateKeyStoreUrl("file://{CA certificate path}/ApsaraDB-CA-Chain.jks");
// The password for the downloaded JKS file is apsaradb and cannot be changed.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Your database endpoint
mysqlDS.setServerName("your_polardb_host");
// Your database port
mysqlDS.setPort(3306);
// Your database username
mysqlDS.setUser("your_username");
// Your database password
mysqlDS.setPassword("your_password");
// Your database name
mysqlDS.setDatabaseName("your_database");
System.out.println("Attempting to connect to the database...");
conn = mysqlDS.getConnection();
System.out.println("Database connection successful!");
// Use try-with-resources to ensure Statement and ResultSet are automatically closed.
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
// Check if the query returned a result.
if (rs.next()) {
// Get the result from the first column and print it.
String dbVersion = rs.getString(1);
System.out.println("Database version: " + dbVersion);
} else {
System.out.println("Failed to retrieve database version information.");
}
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Python
# Install pymysql
# pip install pymysql
import pymysql
# --- Configure your database information ---
db_config = {
'host': 'your_polardb_host', # Your cluster endpoint
'user': 'your_username', # Your username
'password': 'your_password', # Your password
'database': 'your_database', # The database you want to connect to
'port': 3306
}
# --- Configure SSL information ---
ssl_args = {
'ca': '{CA certificate path}/ApsaraDB-CA-Chain.pem',
'mode': 'VERIFY_CA'
}
try:
# Establish a connection, passing ssl parameters
print("Attempting to connect to MySQL with SSL...")
connection = pymysql.connect(**db_config, ssl=ssl_args)
print("SSL connection successful!")
with connection.cursor() as cursor:
# Execute a simple query to verify the connection
cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print(f"Database version: {version[0]}")
except pymysql.MySQLError as e:
# Printing SSL-related errors can be helpful for troubleshooting
print(f"Connection failed: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("Database connection closed.")
Pruebas de rendimiento con Sysbench
Download the certificate y descomprima el paquete.
-
Configure Sysbench:
Agregue
--mysql-ssl=onal comandosysbench.Si utiliza Sysbench 1.0.x, cambie el nombre del archivo .pem a cacert.pem y colóquelo en el directorio donde ejecuta el comando
sysbench. Esta versión de Sysbench define el nombre del certificado SSL de forma fija como cacert.pem.Si utiliza Sysbench 1.1.x, configure el certificado SSL igual que en Sysbench 1.0.x. Como alternativa, especifique la ruta del archivo PEM mediante el parámetro
--mysql-ssl-ca.
-
Para conocer los métodos de prueba de rendimiento, consulte Performance testing method (OLTP).
NotaDurante las pruebas de rendimiento, asegúrese de que la versión de MySQL Client coincida con la versión de MySQL de su clúster de PolarDB.
Paso 4: Verificar la conexión cifrada
El protocolo SSL tiene varias versiones. Actualmente, PolarDB es compatible con TLSv1.2 y posteriores. Durante el handshake SSL, el cliente y el servidor de PolarDB negocian los parámetros de conexión, incluida la versión de TLS, el conjunto de cifrado y la clave de sesión. Para consultar la lista detallada de conjuntos de cifrado, visite el sitio web oficial de OpenSSL.
Conéctese al clúster de PolarDB mediante un cliente configurado para SSL.
-
Ejecute la siguiente consulta SQL:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+ -
Analice el resultado:
Si la columna
Valuedevuelve un valor no vacío, comoDHE-RSA-AES256-GCM-SHA384, la conexión actual está cifrada.Si la columna
Valueestá vacía, la conexión actual no está cifrada. Revise la configuración de su cliente.
Mantenimiento y gestión
Modificar el endpoint protegido
Para cambiar el endpoint protegido por SSL, haga clic en Configure SSL en la sección de dicho endpoint.
Modificar el endpoint protegido actualiza automáticamente el certificado SSL y reinicia el clúster. Ejecute esta operación fuera del horario de mayor actividad.
Actualizar el periodo de validez del certificado
Si cambia el endpoint SSL o el certificado está a punto de caducar, debe actualizar manualmente el periodo de validez del certificado.
Actualizar el periodo de validez del certificado reinicia el clúster. Planifique este tiempo de inactividad en consecuencia.
En la pestaña SSL Settings, haga clic en Update Validity Period.
En el cuadro de diálogo que aparece, haga clic en OK.
Una vez actualizado el periodo de validez, download y configure el nuevo certificado.
El periodo de validez de un certificado SSL no se puede extender. Solo es posible actualizar el periodo de validez y luego descargar y configurar de nuevo el certificado. Para evitar actualizar el certificado manualmente cada vez que se acerca su caducidad, se recomienda habilitar la rotación automática de certificados. Para obtener más información, consulte Enable automatic certificate rotation.
Habilitar la rotación automática de certificados
Si habilita la rotación automática de certificados, PolarDB renueva automáticamente el certificado durante la ventana de mantenimiento del clúster, dentro de los 10 días previos a su caducidad.
La renovación automática de certificados reinicia el clúster. Se recomienda ejecutar esta operación fuera del horario de mayor actividad.
En la pestaña SSL Settings, haga clic en Advanced Settings.
En el cuadro de diálogo Advanced Settings, habilite la rotación automática de certificados y haga clic en Confirm.
Deshabilitar el cifrado SSL
Deshabilitar el cifrado SSL reinicia el clúster. Se recomienda ejecutar esta operación fuera del horario de mayor actividad.
En la pestaña SSL Settings, desactive el interruptor SSL Status para deshabilitar el cifrado SSL.
En el cuadro de diálogo que aparece, haga clic en OK.
API relacionadas
|
API |
Descripción |
|
Consulta la configuración SSL de un clúster de PolarDB. |
|
|
Habilita o deshabilita el cifrado SSL, o actualiza el certificado de CA de un clúster de PolarDB. |