MySQL permite a los usuarios conectarse de forma segura a bases de datos mediante certificados SSL/TLS. En este artículo veremos la configuración SSL de MySQL:cómo habilitar SSL/TLS para MySQL en Ubuntu.
Cómo habilitar SSL/TLS para MySQL
Estos son los pasos para configurar conexiones SSL en MySQL.
1. Instalar MySQL
Abra la terminal y ejecute los siguientes comandos para instalar MySQL.
$ sudo apt-get update $ sudo apt-get install mysql-client
Lectura adicional:MySQL cambia la intercalación de todas las tablas
2. Comprobar el estado de SSL
Inicie sesión en MySQL como root
$ mysql -uroot -p
Se le pedirá la contraseña de root. Después de iniciar sesión, ingrese el siguiente comando para encontrar el estado actual de SSL/TLS
mysql> SHOW VARIABLES LIKE '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | | +---------------+----------+
Encontrará que have_openssl y tener_ssl ambos tienen el valor DISABLED. Significa que SSL no está habilitado en MySQL.
Lectura adicional:Principales blogs de bases de datos a seguir
3. Generar certificados SSL/TLS
A continuación, debemos generar certificados SSL/TLS y apuntar el servidor MySQL a sus ubicaciones. Por lo general, las personas usan openssl para generar certificados SSL y luego los mueven a /var/lib/mysql, que es la ubicación predeterminada de los archivos SSL para el servidor MySQL.
Sin embargo, MySQL 5.7 y versiones posteriores ya vienen con una utilidad mysql_ssl_rsa_setup para simplificar este proceso. Genera certificados SSL y los almacena en /var/lib/mysql.
Como necesitamos el proceso mysql para poder leer estos archivos, haremos mysql como propietario de estos archivos, como se muestra a continuación.
Ejecute el siguiente comando para generar certificados SSL
$ sudo mysql_ssl_rsa_setup --uid=mysqlGenerating a 2048 bit RSA private key ...................................+++ .....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key ......+++ .................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key ......................................................+++ .................................................................................+++
writing new private key to 'client-key.pem'
-----
Puede verificar los archivos generados ejecutando el siguiente comando
$ ls -all /var/lib/mysql/*.pem
Verás algo como lo siguiente
256740 4 -rw-r--r-- 1 mysql mysql 1078 May 1 12:24 /var/lib/mysql/server-cert.pem 256735 4 -rw------- 1 mysql mysql 1675 May 1 12:24 /var/lib/mysqlsql/ca-key.pem 256739 4 -rw-r--r-- 1 mysql mysql 451 May 1 12:24 /var/lib/mysqlsql/public_key.pem 256741 4 -rw------- 1 mysql mysql 1689 May 1 12:24 /var/lib/mysqlsql/client-key.pem 256737 4 -rw-r--r-- 1 mysql mysql 1064 May 1 12:24 /var/lib/mysqlsql/ca.pem 256743 4 -rw-r--r-- 1 mysql mysql 1048 May 1 12:24 /var/lib/mysqlsql/client-cert.pem 256736 4 -rw------- 1 mysql mysql 1625 May 1 12:24 /var/lib/mysqlsql/private_key.pem 256738 4 -rw------- 1 mysql mysql 1615 May 1 12:24 /var/lib/mysqlsql/server-key.pem
Estos son el archivo de certificado SSL y los pares de claves privadas para la autoridad de certificación, el servidor MySQL y el cliente MySQL.
Lectura adicional:las mejores alternativas de MySQL Workbench
4. Habilitar conexiones SSL en el servidor MySQL
A continuación, reinicie MySQL Server para habilitar SSL/TLS en MySQL.
$ sudo systemctl restart mysql
MySQL Server buscará automáticamente archivos de certificados SSL en /var/lib/mysql cuando se inicie. Por lo tanto, no tiene que especificar manualmente su ubicación en el archivo de configuración de MySQL.
Lectura adicional:Cómo habilitar la caché de consultas de MySQL
5. Verificar conexión SSL
Inicie sesión en MySQL como antes (paso 2) y ejecute el siguiente comando.
SHOW VARIABLES LIKE '%ssl%'; Output +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+
Ahora encontrará have_openssl y tener_ssl las variables son SÍ. También verá que ssl_ca , certificado_ssl y clave_ssl se completan con valores apropiados.
También puede comprobar los detalles de su conexión.
mysql>\s
--------------
. . .
SSL: Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection: 127.0.0.1 via TCP/IP
. . .
--------------
6. Configurar SSL para conexión remota (Opcional)
Si su servidor MySQL tiene conexiones entrantes remotas, puede habilitar SSL para la conexión remota e incluso hacer que sea obligatorio modificando el archivo de configuración del servidor MySQL.
Abra la terminal y ejecute el siguiente comando para abrir la configuración de MySQL.
$ sudo vi /etc/mysql/my.cnf
Agregue el bloque de código [mysqld] como se muestra, debajo de las dos declaraciones !includedir.
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
bind-address = 0.0.0.0
En la última línea, hemos establecido bind-address en 0.0.0.0 para permitir conexiones remotas. No necesita agregarlo si ya ha habilitado las conexiones remotas.
Reinicie MySQL Server para aplicar los cambios. A partir de ahora, MySQL requerirá SSL.
Para conexiones remotas, no olvide abrir el puerto 443, en lugar del 3306 predeterminado. Esto se debe a que las conexiones SSL se realizan a través del puerto 443 y no del 3306.
Con suerte, este artículo lo ayudará a habilitar la conexión SSL/TLS en MySQL.