diff --git a/HowtoMySQL.md b/HowtoMySQL.md index 92604e8c..b2f21108 100644 --- a/HowtoMySQL.md +++ b/HowtoMySQL.md @@ -1786,6 +1786,108 @@ Il est possible de filtrer le type d'événements avec la variable `server_audit La rotation des logs est automatique, mais personnalisable. +## Activé la connexion via SSL/TLS à la base de données + +### Principe de fonctionnement + +On génère une CA (clé privée et certificat) pour pouvoir signé une certificat serveur et client. + +On ajoute le certificat serveur dans la configuration du serveur MySQL. + +Le certificat client sert a se connecter au instances MySQL en SSL, soit avec PhpMyAdmin soit avec mysql-client, ou autres. + +On par du principe qu'on l'on créer les clés / certificats dans _/etc/mysql/ssl_ + +### Création de la CA + +On créé la CA comme ceci : + +~~~ +# openssl genrsa 4096 > mysql-ca-key.pem +# openssl req -new -x509 -nodes -days 365000 -key mysql-ca-key.pem -out mysql-ca-cert.pem +~~~ + +### Création du certificat SSL serveur + +On créé le certificat serveur comme ceci, ne général on mets comme Common Name le hostname du serveur : + +~~~ +# openssl req -newkey rsa:2048 -days 365 -nodes -keyout mysql-server-key.pem -out mysql-server-req.pem +# openssl rsa -in mysql-server-key.pem -out mysql-server-key.pem +# openssl x509 -req -in mysql-server-req.pem -days 365 -CA mysql-ca-cert.pem -CAkey mysql-ca-key.pem -set_serial 01 -out mysql-server-cert.pem +~~~ + +### Création du certificat SSL client + +On créé le certificat client comme ceci, le Common Name est identique à celui du serveur : + +~~~ +# openssl req -newkey rsa:2048 -days 365 -nodes -keyout mysql-client-key.pem -out mysql-client-req.pem +# openssl rsa -in mysql-client-key.pem -out mysql-client-key.pem +# openssl x509 -req -in mysql-client-req.pem -days 365 -CA mysql-ca-cert.pem -CAkey mysql-ca-key.pem -set_serial 01 -out mysql-client-cert.pem +~~~ + +On vérifie la correspondance des certificats entre le certificat serveur et client comme ceci : + +~~~ +# openssl verify -CAfile mysql-ca-cert.pem mysql-server-cert.pem mysql-client-cert.pem +mysql-server-cert.pem: OK +mysql-client-cert.pem: OK +~~~ + +### Installation du certificat SSL serveur sur une instance MySQL + +Il faut possitionner les bons droits sur les certificats comme ceci : + +~~~ +# chown -Rv mysql:root /etc/mysql/ssl/ +~~~ + +Puis on mets cette configuration dans _/etc/mysql/mariadb.conf.d/zzz-evolinux-custom.cnf_ + +~~~ +# SSL +ssl = on +ssl-ca = /etc/mysql/ssl/mysql-ca-cert.pem +ssl-cert = /etc/mysql/ssl/mysql-server-cert.pem +ssl-key = /etc/mysql/ssl/mysql-server-key.pem +ssl-cipher = AES256-SHA +~~~ + +Un redémarrage de mysql / mariadb est necessaire : + +~~~ +# systemctl restart mysql.service +~~~ + +On peux vérifié que c'est bien pris en compte sur l'instance : + +~~~ +mysql> show variables like '%ssl%'; ++--------------------+--------------------------------------+ +| Variable_name | Value | ++--------------------+--------------------------------------+ +| have_openssl | YES | +| have_ssl | YES | +| mysqlx_ssl_ca | | +| mysqlx_ssl_capath | | +| mysqlx_ssl_cert | | +| mysqlx_ssl_cipher | | +| mysqlx_ssl_crl | | +| mysqlx_ssl_crlpath | | +| mysqlx_ssl_key | | +| ssl_ca | /etc/mysql/ssl/mysql-ca-cert.pem | +| ssl_capath | | +| ssl_cert | /etc/mysql/ssl/mysql-server-cert.pem | +| ssl_cipher | AES256-SHA | +| ssl_crl | | +| ssl_crlpath | | +| ssl_fips_mode | OFF | +| ssl_key | /etc/mysql/ssl/mysql-server-key.pem | ++--------------------+--------------------------------------+ +17 rows in set (0.00 sec) +~~~ + ## Optimisation avancée Voir [/HowtoMySQL/Optimize]().