Cómo configurar conexiones SSL de MySQL
Válido para las versiones 88 hasta la última versión
Última modificación: 27 de agosto de 2021
Visión general
Este documento describe cómo configurar su servidor para usar SSL para conexiones de base de datos MySQL®. Después de proteger sus conexiones MySQL, los usuarios malintencionados no pueden interceptar su tráfico MySQL.
Importante:
usted debe poseer root
acceso al cliente y a los servidores host para completar este tutorial.
Configurar conexiones SSL de MySQL
Cree el directorio para almacenar las claves SSL
Para crear el directorio que contendrá las claves SSL, realice los siguientes pasos:
Inicie sesión en su servidor a través de SSH. Para obtener más información, lea nuestro Acceso SSH documentación.
Cree un directorio de almacenamiento de claves SSL al que pueda acceder MySQL. Por ejemplo, ejecute el
mkdir /mysql_keys
comando para crear unmysql_keys
directorio.
Crea las claves SSL
Nota:
En los siguientes ejemplos,
/mysql_keys
representa el directorio de almacenamiento de claves.El nombre común de los certificados y claves para el cliente y el servidor debe ser diferente del nombre común del certificado de CA. Los nombres comunes idénticos fallarán con un error similar a:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Para crear las claves SSL, realice los siguientes pasos:
Ejecute los siguientes comandos para crear las claves de la autoridad de certificación (CA):
1 2
openssl genrsa 2048 > /mysql_keys/ca-key.pem openssl req -sha1 -new -x509 -nodes -days 3650 -key /mysql_keys/ca-key.pem > /mysql_keys/ca-cert.pem
Ejecute los siguientes comandos para crear el certificado y la clave SSL del servidor:
1 2 3
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /mysql_keys/server-key.pem > /mysql_keys/server-req.pem openssl x509 -sha1 -req -in /mysql_keys/server-req.pem -days 3650 -CA /mysql_keys/ca-cert.pem -CAkey /mysql_keys/ca-key.pem -set_serial 01 > /mysql_keys/server-cert.pem openssl rsa -in /mysql_keys/server-key.pem -out /mysql_keys/server-key.pem
Ejecute los siguientes comandos para crear el certificado y la clave SSL del cliente:
1 2 3
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /mysql_keys/client-key.pem > /mysql_keys/client-req.pem openssl x509 -sha1 -req -in /mysql_keys/client-req.pem -days 3650 -CA /mysql_keys/ca-cert.pem -CAkey /mysql_keys/ca-key.pem -set_serial 01 > /mysql_keys/client-cert.pem openssl rsa -in /mysql_keys/client-key.pem -out /mysql_keys/client-key.pem
Edita la configuración de MySQL
Para editar la configuración de MySQL, realice los siguientes pasos:
Abre el
/etc/my.cnf
archivo con su editor de texto preferido.Inserte las siguientes líneas en el
[mysqld]
sección de lamy.cnf
expediente:1 2 3 4 5
ssl ssl-cipher=DHE-RSA-AES256-SHA ssl-ca=/mysql_keys/ca-cert.pem ssl-cert=/mysql_keys/server-cert.pem ssl-key=/mysql_keys/server-key.pem
Inserte las siguientes líneas en el
[client]
sección de lamy.cnf
expediente:Nota:
Si el
[client]
la sección no existe, tu debe Agrega un[client]
sección.1 2 3 4
[client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
Tu actualizado
my.cnf
El archivo debe parecerse al siguiente ejemplo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
[mysqld] max_connections=500 log-slow-queries max_allowed_packet=268435456 open_files_limit=10000 default-storage-engine=MyISAM innodb_file_per_table=1 performance-schema=0 ssl ssl-cipher=DHE-RSA-AES256-SHA ssl-ca=/mysql_keys/ca-cert.pem ssl-cert=/mysql_keys/server-cert.pem ssl-key=/mysql_keys/server-key.pem [client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
Nota:
los
ssl-mode=REQUIRED
La configuración creará una conexión cifrada si el servidor admite conexiones cifradas. Si el servidor no puede crear una conexión cifrada, la conexión fallará. Para obtener más información sobre opciones adicionales parassl-mode
configuración, leer MySQL modo ssl documentación.MySQL introdujo el
ssl-mode
configuración en MySQL 5.7. Si ejecuta MySQL 5.6 o anterior, reemplacessl-mode=REQUIRED
conssl
.
Guarde sus cambios en el
/etc/my.cnf
archivo y salga de su editor de texto.Ejecute el siguiente comando para actualizar los permisos de archivo del
/mysql_keys
directorio y sus archivos:chown -Rf mysql. /mysql_keys
Ejecutar el
/scripts/restartsrv_mysql
script para reiniciar MySQL.
Prueba la configuración de SSL
Para probar la configuración de SSL, realice los siguientes pasos:
Para ver la configuración SSL activa de MySQL, ejecute el siguiente comando:
mysql -e "show variables like '%ssl%';"
La salida se parecerá al siguiente ejemplo:
1 2 3 4 5 6 7 8 9 10 11
+---------------+------------------------+ | Variable_name | Value | +---------------+------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /mysql_keys/ca-cert.pem | | ssl_capath | | | ssl_cert | /mysql_keys/server-cert.pem | | ssl_cipher | DHE-RSA-AES256-SHA | | ssl_key | /mysql_keys/server-key.pem | +---------------+------------------------+
Para verificar una conexión local a MySQL, ejecute el siguiente comando, donde ejemplo representa el nombre de usuario de la cuenta de cPanel:
Cuando el sistema se lo solicite, ingrese la contraseña de la cuenta de usuario de MySQL.
Después de conectarse, ejecute el
status
mando. La salida se parecerá al siguiente ejemplo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
mysql> status -------------- mysql Ver 14.14 Distrib 5.5.42, for Linux (x86_64) using readline 5.1 Connection id: 19 Current database: Current user: example@localhost SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.42-cll MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 4 min 36 sec Threads: 1 Questions: 67 Slow queries: 0 Opens: 34 Flush tables: 1 Open tables: 27 Queries per second avg: 0.242 --------------
Crea un usuario y permite el acceso remoto
Nota:
Este paso es Opcional.
Para crear un usuario y permitir el acceso remoto, realice los siguientes pasos:
Navega a cPanel’s Bases de datos MySQL interfaz (cPanel >> Inicio >> Bases de datos >> Bases de datos MySQL) y cree su usuario de base de datos.
Agregue la dirección IP del servidor remoto a WHM MySQL remoto interfaz (cPanel >> Inicio >> Bases de datos >> Remoto MySQL).
En el servidor MySQL remoto, cree un directorio de almacenamiento de claves SSL al que pueda acceder MySQL. Por ejemplo, use el
mkdir /mysql_keys
comando para crear unmysql_keys
directorio.Nota:
Puede omitir este paso si ya ha creado el
/mysql_keys
directorio en el servidor MySQL remoto.Copie el certificado SSL del cliente en el servidor MySQL remoto.
/mysql
directorio.En el servidor MySQL remoto, abra el
/etc/my.cnf
archivo con su editor de texto preferido.Inserte las siguientes líneas en el
[client]
sección de lamy.cnf
expediente:1 2 3 4
[client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
Nota:
Si el
[client]
la sección no existe, tu debe agregue la sección.Tu actualizado /
etc/my.cnf
El archivo debe parecerse al siguiente ejemplo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[mysqld] max_connections=500 log-slow-queries max_allowed_packet=268435456 open_files_limit=10000 default-storage-engine=MyISAM innodb_file_per_table=1 performance-schema=0 [client] ssl-mode=REQUIRED ssl-cert=/mysql_keys/client-cert.pem ssl-key=/mysql_keys/client-key.pem
Nota:
los
ssl-mode=REQUIRED
La configuración creará una conexión cifrada si el servidor admite conexiones cifradas. Si el servidor no puede crear una conexión cifrada, la conexión fallará. Para obtener más información sobre opciones adicionales parassl-mode
configuración, leer MySQL modo ssl documentación.MySQL introdujo el
ssl-mode
configuración en MySQL 5.7. Si ejecuta MySQL 5.6 o anterior, reemplacessl-mode=REQUIRED
conssl
.
Guarde sus cambios en el
/etc/my.cnf
archivo y salga de su editor de texto.Ejecute el siguiente comando para actualizar los permisos para el
/mysql_keys
directorio y sus archivos:chown -Rf mysql. /mysql_keys
Reinicie el servidor MySQL.
Nota:
Si el servidor MySQL remoto ejecuta cPanel & WHM, use el /scripts/restartsrv_mysql
script para reiniciar MySQL.
Pruebe la conexión MySQL remota
Para probar la conexión MySQL remota, realice los siguientes pasos:
Inicie sesión en el servidor MySQL remoto a través de SSH. Para obtener más información, lea nuestro Acceso SSH documentación.
Utilizar el
mysql
comando para conectarse de forma remota al servidor MySQL. El siguiente ejemplo usa la dirección IP192.168.0.1
para el servidor MySQL de destino yexample
para el usuario de MySQL:mysql -u example -h 192.168.0.1 -p
los
mysql
El comando lo conectará al servidor MySQL remoto y solicitará la contraseña de usuario de MySQL.Después de conectarse al servidor MySQL remoto, ingrese el
status
mando. La salida se parecerá al siguiente ejemplo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
mysql> status -------------- mysql Ver 14.14 Distrib 5.5.42, for Linux (x86_64) using readline 5.1 Connection id: 19 Current database: Current user: example@localhost SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.42-cll MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 4 min 36 sec Threads: 1 Questions: 67 Slow queries: 0 Opens: 34 Flush tables: 1 Open tables: 27 Queries per second avg: 0.242 --------------