Ajout doc création certificat + configuration instance mysql pour SSL / TLS

This commit is contained in:
emorino 2022-01-26 15:57:10 +01:00
parent 0e9c3abb54
commit a0a1923dcf

View file

@ -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]().