En esta publicación de blog, revisamos algunos de los aspectos importantes de la configuración y administración de SSL en el alojamiento MySQL. Estos incluirían la configuración predeterminada, la desactivación de SSL y la activación y aplicación de SSL en un servidor MySQL. Nuestras observaciones se basan en la versión comunitaria de MySQL 5.7.21.
Configuración SSL predeterminada en MySQL
De manera predeterminada, el servidor MySQL siempre instala y habilita la configuración SSL. Sin embargo, no se exige que los clientes se conecten mediante SSL. Los clientes pueden elegir conectarse con o sin SSL ya que el servidor permite ambos tipos de conexiones. Veamos cómo verificar este comportamiento predeterminado del servidor MySQL.
Cuando SSL está instalado y habilitado en el servidor MySQL de forma predeterminada, normalmente veremos lo siguiente:
- Presencia de archivos *.pem en el directorio de datos de MySQL. Estos son los diversos certificados y claves de cliente y servidor que se utilizan para SSL como se describe aquí.
- Habrá una nota en el archivo de registro de errores de mysqld durante el inicio del servidor, como:
- [Nota] Se encontraron ca.pem, server-cert.pem y server-key.pem en el directorio de datos. Intentando habilitar la compatibilidad con SSL usándolos.
- El valor de la variable 'have_ssl' será SÍ:
mysql> muestra variables como 'have_ssl';
+—————+——-+
| nombre_variable | Valor |
+—————+——-+
| tener_ssl | SÍ |
+—————+——-+
Con respecto al cliente MySQL, de forma predeterminada, siempre intenta establecer una conexión de red cifrada con el servidor y, si eso falla, vuelve al modo sin cifrar.
Entonces, conectándose al servidor MySQL usando el comando:
mysql -h
Podemos verificar si la conexión actual del cliente está encriptada o no usando el comando de estado:
estado mysql>
————–
mysql Ver 14.14 Distrib 5.7.21, para Linux (x86_64) usando EditLine wrapper
ID de conexión: 75
Base de datos actual:
Usuario actual: [email protected]
SSL: El cifrado en uso es DHE-RSA-AES256-SHA
Buscapersonas actual: stdout
Uso del archivo de salida: ”
Uso del delimitador: ;
Versión del servidor: 5.7.21-log MySQL Community Server (GPL)
Versión del protocolo: 10
Conexión: 127.0.0.1 a través de TCP/IP
…………………………..
El campo SSL resaltado arriba indica que la conexión está encriptada. Sin embargo, podemos pedirle al cliente MySQL que se conecte sin SSL usando el comando:
mysql -h
mysql> estado
————–
ID de conexión: 93
Base de datos actual:
Usuario actual: [email protected]
SSL: No está en uso
Buscapersonas actual: stdout
Uso del archivo de salida: ”
Uso del delimitador: ;
Versión del servidor: 5.7.21-log MySQL Community Server (GPL)
Versión del protocolo: 10
Conexión: 127.0.0.1 a través de TCP/IP
………………………………
Podemos ver que aunque SSL está habilitado en el servidor, podemos conectarnos sin SSL.
Tutorial de MySQL:cómo configurar y administrar SSL en su servidor #MySQLHaga clic para twittear
Deshabilitar SSL en MySQL
Si su requisito es desactivar SSL por completo en el servidor MySQL en lugar de la opción predeterminada de 'modo habilitado pero opcional', podemos hacer lo siguiente:
- Elimine el certificado *.pem y los archivos clave en el directorio de datos de MySQL.
- Inicie MySQL con la opción SSL desactivada. Esto se puede hacer agregando una entrada de línea:
ssl=0 en el archivo my.cnf.
Podemos observar que:
- NO habrá ninguna nota en los registros de mysqld como:
- [Nota] Se encontraron ca.pem, server-cert.pem y server-key.pem en el directorio de datos. Intentando habilitar el soporte SSL usándolos.
- El valor de la variable 'have_ssl' se DESACTIVARÁ:
mysql> muestra variables como 'have_ssl';
+—————+——-+
| nombre_variable | Valor |
+—————+——-+
| tener_ssl | DESHABILITADO |
+—————+——-+
Hacer cumplir SSL en MySQL
Vimos que, aunque SSL estaba habilitado de forma predeterminada en el servidor MySQL, no se aplicó y aún podíamos conectarnos sin SSL.
Ahora, al establecer la variable del sistema require_secure_transport , podremos hacer cumplir que el servidor solo aceptará conexiones SSL. Esto se puede verificar intentando conectarse al servidor MySQL con el comando:
mysql -h
Y podemos ver que la conexión sería rechazada con el siguiente mensaje de error del servidor:
ERROR 3159 (HY000):Las conexiones que usan transporte inseguro están prohibidas mientras –require_secure_transport=ON.
Consideraciones de SSL para los canales de replicación
De forma predeterminada, en una configuración de replicación de MySQL, los esclavos se conectan al maestro sin encriptación.
Por lo tanto, para conectarse a un maestro de forma segura para el tráfico de replicación, los esclavos deben usar MASTER_SSL=1; como parte de 'CAMBIAR MAESTRO A' Comando que especifica parámetros para conectarse al maestro. Tenga en cuenta que esta opción también es obligatoria en caso de que su maestro esté configurado para hacer cumplir la conexión SSL mediante require_secure_transport.