MySQL Management · 6 min read · Jan 29, 2026

Gestión de Múltiples Servidores MySQL Desde Una Instalación de phpMyAdmin (Usando Cifrado SSL)

Gestión de Múltiples Servidores MySQL Desde Una Instalación de phpMyAdmin (Usando Cifrado SSL)

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Este tutorial explica cómo puedes gestionar múltiples servidores MySQL desde una instalación de phpMyAdmin. Por razones de seguridad, la comunicación entre phpMyAdmin y cualquier servidor MySQL remoto utiliza cifrado SSL (esto no es necesario para un servidor MySQL local ya que la comunicación entre phpMyAdmin y MySQL no sale del servidor). phpMyAdmin es una herramienta de software libre escrita en PHP, destinada a manejar la administración de MySQL a través de la World Wide Web. phpMyAdmin soporta una amplia gama de operaciones con MySQL.

¡No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

En este tutorial mostraré cómo gestionar dos servidores MySQL: uno local (local.example.com con la dirección IP 192.168.0.100 - este es el servidor donde está instalado phpMyAdmin) y un servidor remoto (remote.example.com con la dirección IP 192.168.0.101) - desde una instancia de phpMyAdmin. Asumo que phpMyAdmin ya está instalado (ya sea manualmente o a través del gestor de paquetes de tu distribución) y funcionando (es decir, ya deberías poder gestionar el servidor MySQL local a través de phpMyAdmin) - no cubriré la instalación de phpMyAdmin aquí.

Este tutorial se basa en Debian Wheezy/Ubuntu 12.04. Para otras distribuciones, es posible que debas ajustar algunas rutas, pero el principio es el mismo.

2 Habilitando Soporte SSL En El Servidor MySQL Remoto

remote.example.com:

Inicia sesión en MySQL…

mysql -u root -p

… y ejecuta el siguiente comando en la consola de MySQL:

show variables like '%ssl%';

Si la salida es la siguiente (ambos have_openssl y have_ssl muestran DISABLED)…

mysql> show variables like ’%ssl%’;
+—————+———-+
| Variable_name | Value    |
+—————+———-+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+—————+———-+
7 rows in set (0.00 sec)

mysql>

… significa que MySQL fue compilado con soporte SSL, pero actualmente no está habilitado. Para habilitarlo, primero sal de la consola de MySQL…

quit;

… y abre /etc/mysql/my.cnf:

vi /etc/mysql/my.cnf

Desplázate hacia abajo hasta la sección * Características de Seguridad (dentro de la sección [mysqld]) y agrega una línea con la palabra ssl:

| | [...] # * Características de Seguridad # # ¡Lee el manual también, si quieres chroot! # chroot = /var/lib/mysql/ # # Para generar certificados SSL, recomiendo la GUI de OpenSSL "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |

Reinicia MySQL…

/etc/init.d/mysql restart

… y verifica nuevamente si SSL ahora está habilitado:

mysql -u root -p
show variables like '%ssl%';

La salida debería ser la siguiente, lo que significa que SSL ahora está habilitado:

mysql> show variables like ’%ssl%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_openssl  | YES   |
| have_ssl      | YES   |
| ssl_ca        |       |
| ssl_capath    |       |
| ssl_cert      |       |
| ssl_cipher    |       |
| ssl_key       |       |
+—————+——-+
7 rows in set (0.00 sec)

mysql>

Escribe…

quit;

… para salir de la consola de MySQL.

Asegúrate de que OpenSSL esté instalado:

apt-get install openssl

Ahora verifica tu versión de OpenSSL:

root@remote:~# openssl version
OpenSSL 1.0.1c 10 May 2012
root@remote:~#

Si tú - como yo - tienes la versión de OpenSSL 1.0.1c, los certificados generados por OpenSSL causarán errores como

Sep 18 17:02:15 remote mysqld: SSL error: Unable to get private key from ‘/etc/mysql/newcerts/server-key.pem’
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] Failed to setup SSL
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] SSL error: Unable to get private key

(en /var/log/syslog en remote.example.com) y

root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
Enter password:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
root@local:/etc/mysql/newcerts#

(en local.example.com cuando intentas establecer una conexión cifrada a remote.example.com), al menos con MySQL 5.5; ver:

Para resolver este problema, simplemente construimos nuestro propio OpenSSL (esto no es necesario si tu versión de OpenSSL es anterior a 1.0.1):

cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config –prefix=/usr/local/openssl-0.9.8
make
make install

Después encontrarás tu nuevo binario de OpenSSL en /usr/local/openssl-0.9.8/bin/openssl.

Ahora creamos los certificados CA, servidor y cliente que necesitamos para las conexiones SSL. Creo estos certificados en el directorio /etc/mysql/newcerts que primero debo crear:

mkdir /etc/mysql/newcerts && cd /etc/mysql/newcerts

Crea el certificado CA (aquí estoy usando /usr/local/openssl-0.9.8/bin/openssl; si la versión de OpenSSL de tu sistema es anterior a 1.0.1, puedes simplemente usar openssl):

/usr/local/openssl-0.9.8/bin/openssl genrsa 2048 > ca-key.pem
/usr/local/openssl-0.9.8/bin/openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

Crea el certificado del servidor:

/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
/usr/local/openssl-0.9.8/bin/openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

Crea el certificado del cliente:

/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
/usr/local/openssl-0.9.8/bin/openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

La salida de…

ls -l

… debería verse ahora como sigue:

root@remote:/etc/mysql/newcerts# ls -l
total 32
-rw-r–r– 1 root root 1346 Sep 18 17:52 ca-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:52 ca-key.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 client-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 client-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 client-req.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 server-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 server-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 server-req.pem
root@remote:/etc/mysql/newcerts#

Ahora debemos transferir ca-cert.pem, client-cert.pem y client-key.pem al servidor MySQL local (en local.example.com); antes de hacer esto, creamos el directorio /etc/mysql/newcerts en local.example.com:

local.example.com:

mkdir /etc/mysql/newcerts

De vuelta en

remote.example.com

, podemos transferir los tres archivos a

local.example.com

como sigue:

remote.example.com:

scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts
  scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts
  scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcerts

A continuación, abre /etc/mysql/my.cnf…

vi /etc/mysql/my.cnf

… y modifica la sección * Características de Seguridad; descomenta las líneas ssl-ca, ssl-cert y ssl-key y completa los valores correctos:

| | [...] # * Características de Seguridad # # ¡Lee el manual también, si quieres chroot! # chroot = /var/lib/mysql/ # # Para generar certificados SSL, recomiendo la GUI de OpenSSL "tinyca". ssl ssl-ca=/etc/mysql/newcerts/ca-cert.pem ssl-cert=/etc/mysql/newcerts/server-cert.pem ssl-key=/etc/mysql/newcerts/server-key.pem [...] | |

Reinicia MySQL:

/etc/init.d/mysql restart

Ahora inicia sesión en MySQL nuevamente…

mysql -u root -p

… y verifica que SSL está habilitado y que los certificados correctos se cargaron:

show variables like '%ssl%';

mysql> show variables like ’%ssl%’;
+—————+————————————-+
| Variable_name | Value                               |
+—————+————————————-+
| have_openssl  | YES                                 |
| have_ssl      | YES                                 |
| ssl_ca        | /etc/mysql/newcerts/ca-cert.pem     |
| ssl_capath    |                                     |
| ssl_cert      | /etc/mysql/newcerts/server-cert.pem |
| ssl_cipher    |                                     |
| ssl_key       | /etc/mysql/newcerts/server-key.pem  |
+—————+————————————-+
7 rows in set (0.00 sec)

mysql>

No salgas de la consola de MySQL. Ahora vamos a crear un usuario root de MySQL que esté permitido conectar desde local.example.com a remote.example.com y que se requiera usar SSL:

CREATE USER ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT USAGE ON *.* TO 'root'@'192.168.0.100' REQUIRE SSL;

CREATE USER ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT USAGE ON *.* TO 'root'@'local.example.com' REQUIRE SSL;
FLUSH PRIVILEGES;

Ahora puedes salir de la consola de MySQL:

quit;

Eso es todo: ahora tenemos un usuario root de MySQL que está permitido conectar desde local.example.com a remote.example.com, pero se requiere usar cifrado SSL.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.