MySQL Administration · 6 min read · Jan 29, 2026
Gestion de plusieurs serveurs MySQL à partir d'une installation phpMyAdmin (en utilisant le chiffrement SSL)
Gestion de plusieurs serveurs MySQL à partir d’une installation phpMyAdmin (en utilisant le chiffrement SSL)
Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter
Ce tutoriel explique comment vous pouvez gérer plusieurs serveurs MySQL à partir d’une seule installation de phpMyAdmin. Pour des raisons de sécurité, la communication entre phpMyAdmin et tout serveur MySQL distant utilise le chiffrement SSL (ceci n’est pas nécessaire pour un serveur MySQL local puisque la communication entre phpMyAdmin et MySQL ne quitte pas le serveur). phpMyAdmin est un outil logiciel gratuit écrit en PHP, destiné à gérer l’administration de MySQL sur le World Wide Web. phpMyAdmin prend en charge un large éventail d’opérations avec MySQL.
Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Remarque préliminaire
Dans ce tutoriel, je vais montrer comment gérer deux serveurs MySQL - un local (local.example.com avec l’adresse IP 192.168.0.100 - c’est le serveur où phpMyAdmin est installé) et un serveur distant (remote.example.com avec l’adresse IP 192.168.0.101) - à partir d’une instance de phpMyAdmin. Je suppose que phpMyAdmin est déjà installé (soit manuellement, soit via le gestionnaire de paquets de votre distribution) et fonctionne (c’est-à-dire que vous devriez déjà être en mesure de gérer le serveur MySQL local via phpMyAdmin) - je ne couvrirai pas l’installation de phpMyAdmin ici.
Ce tutoriel est basé sur Debian Wheezy/Ubuntu 12.04. Pour d’autres distributions, vous devrez peut-être ajuster certains chemins, mais le principe est le même.
2 Activation du support SSL sur le serveur MySQL distant
remote.example.com :
Connectez-vous à MySQL…
mysql -u root -p… et exécutez la commande suivante dans le shell MySQL :
show variables like '%ssl%';Si la sortie est la suivante (les deux have_openssl et have_ssl affichent 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>
… cela signifie que MySQL a été compilé avec le support SSL, mais qu’il n’est actuellement pas activé. Pour l’activer, quittez d’abord le shell MySQL…
quit;… et ouvrez /etc/mysql/my.cnf :
vi /etc/mysql/my.cnfFaites défiler vers le bas jusqu’à la section * Fonctionnalités de sécurité (dans la section [mysqld]) et ajoutez une ligne avec le mot ssl :
| | [...] # * Fonctionnalités de sécurité # # Lisez également le manuel, si vous voulez chroot ! # chroot = /var/lib/mysql/ # # Pour générer des certificats SSL, je recommande l'interface graphique OpenSSL "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |
Redémarrez MySQL…
/etc/init.d/mysql restart… et vérifiez à nouveau si SSL est maintenant activé :
mysql -u root -pshow variables like '%ssl%';La sortie devrait être la suivante, ce qui signifie que SSL est maintenant activé :
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>
Tapez…
quit;… pour quitter le shell MySQL.
Assurez-vous qu’OpenSSL est installé :
apt-get install opensslMaintenant, vérifiez votre version d’OpenSSL :
root@remote:~# openssl version
OpenSSL 1.0.1c 10 mai 2012
root@remote:~#
Si vous - comme moi - avez la version 1.0.1c d’OpenSSL, les certificats générés par OpenSSL provoqueront des erreurs comme
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
(dans /var/log/syslog sur remote.example.com) et
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
Entrez le mot de passe :
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
root@local:/etc/mysql/newcerts#
(sur local.example.com lorsque vous essayez d’établir une connexion chiffrée à remote.example.com), du moins avec MySQL 5.5 ; voir :
Pour résoudre ce problème, nous construisons simplement notre propre OpenSSL (ceci n’est pas nécessaire si votre version d’OpenSSL est antérieure à 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
Après cela, vous trouverez votre nouveau binaire OpenSSL dans /usr/local/openssl-0.9.8/bin/openssl.
Maintenant, nous créons les certificats CA, serveur et client dont nous avons besoin pour les connexions SSL. Je crée ces certificats dans le répertoire /etc/mysql/newcerts que je dois d’abord créer :
mkdir /etc/mysql/newcerts && cd /etc/mysql/newcertsCréez le certificat CA (j’utilise /usr/local/openssl-0.9.8/bin/openssl ici ; si la version d’OpenSSL de votre système est antérieure à 1.0.1, vous pouvez simplement utiliser 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.pemCréez le certificat serveur :
/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.pemCréez le certificat client :
/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.pemLa sortie de…
ls -l… devrait maintenant ressembler à ceci :
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#
Nous devons maintenant transférer ca-cert.pem, client-cert.pem et client-key.pem vers le serveur MySQL local (sur local.example.com) ; avant de faire cela, nous créons le répertoire /etc/mysql/newcerts sur local.example.com :
local.example.com :
mkdir /etc/mysql/newcertsDe retour sur
remote.example.com
, nous pouvons transférer les trois fichiers vers
local.example.com
comme suit :
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/newcertsEnsuite, ouvrez /etc/mysql/my.cnf…
vi /etc/mysql/my.cnf… et modifiez la section * Fonctionnalités de sécurité ; décommentez les lignes ssl-ca, ssl-cert et ssl-key et remplissez les valeurs correctes :
| | [...] # * Fonctionnalités de sécurité # # Lisez également le manuel, si vous voulez chroot ! # chroot = /var/lib/mysql/ # # Pour générer des certificats SSL, je recommande l'interface graphique 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 [...] | |
Redémarrez MySQL :
/etc/init.d/mysql restartMaintenant, connectez-vous à nouveau à MySQL…
mysql -u root -p… et vérifiez que SSL est activé et que les certificats corrects sont chargés :
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>
Ne quittez pas le shell MySQL. Nous allons maintenant créer un utilisateur root MySQL qui est autorisé à se connecter depuis local.example.com à remote.example.com et qui est tenu d’utiliser 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;Maintenant, vous pouvez quitter le shell MySQL :
quit;C’est tout - nous avons maintenant un utilisateur root MySQL qui est autorisé à se connecter depuis local.example.com à remote.example.com, mais qui est tenu d’utiliser le chiffrement SSL.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.