sql >> Base de Datos >  >> RDS >> Mysql

Cómo habilitar SSL/TLS para MySQL en Ubuntu

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=mysql

Generating 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.