Dernièrement j’utilisais un tunnel openvpn pour faire passer le flux de réplication des serveurs Mysql ou Mariadb. C’était simple et facile vu qu’il y avait déjà un tunnel en place. Le problème, c’est le délai de propagation si le serveur Openvpn est lent, et cela ajoute point faible à la réplication car cela dépend d’un autre serveur. Je n’avais jamais vraiment creuser la partie SSL de Mysql mais finalement cela se révèle assez simple ! Voici comment faire !
On considère SERVEUR_A , notre serveur Mysql maître et SERVEUR_B, notre serveur esclave. Aller, c’est parti ! (je ne reviens pas ici sur la mise en place de la réplication simple présente dans l’article Réplication Mysql)
## sur SERVEUR_A mkdir /etc/mysql/ssl cd /etc/mysql/ssl #créer le certificat du serveur openssl req -x509 -newkey rsa:2048 -keyout master-private.pem -out master-public.pem -nodes -days 3650 openssl rsa -in master-private.pem -out master-private.pem cp master-public.pem ca-cert.pem #créer le certificat du client openssl req -x509 -newkey rsa:2048 -keyout slave-private.pem -out slave-public.pem -nodes -days 3650 openssl rsa -in slave-private.pem -out slave-private.pem cat slave-public.pem >> ca-cert.pem chown mysql:mysql /etc/mysql/ssl -R #ajouter les lignes ci-dessous dans /etc/mysql/my.cnf ssl ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/master-public.pem ssl-key=/etc/mysql/ssl/master-private.pem #redémarre mysql service mysql restart #vous pouvez vérifier que SSL fonctionne mysql --defaults-file=/etc/mysql/debian.cnf SHOW VARIABLES LIKE '%ssl%'; ## sur SERVEUR_B mkdir /etc/mysql/ssl scp root@SERVEUR_A:/etc/mysql/ssl/ca-cert.pem /etc/mysql/ssl/ca-cert.pem #on indique à MYSQL de se connecter en SSL mysql --defaults-file=/etc/mysql/debian.cnf stop slave; change master to MASTER_HOST='SERVEUR_A', MASTER_USER='replication', MASTER_PASSWORD='replication_password', MASTER_SSL=1, MASTER_SSL_CA='/etc/mysql/ssl/ca-cert.pem', MASTER_LOG_FILE='mysql-bin.000055', MASTER_LOG_POS=555555; start slave; #on verifie le SSL show slave status\G;
Et voilà, la connexion entre le serveur maître et esclave fonctionne en SSL. Si vous voulez forcer la connexion uniquement en SSL, vous pouvez changer les droits de l’utilisateur réplication sur SERVEUR_A, en indique SSL_TYPE=’ANY’. Cela désactivera la possibilité de se connecter sans certificats.
Cela fonctionne également pour les réplications en cascade. Ne pas oublier sur les serveurs esclaves qui deviennent maître d’ajouter la directive log_slave_updates=true dans le fichier /etc/mysql/my.cnf
Bien entendu, tout cela fonctionne également sous Mariadb, il suffit d’adapter les chemins vers les fichiers de configuration.
Plan du site | Mentions légales | Contactez-moi | Gestion des cookies