MySQL : chiffrer vos connexions

Le chiffrement de la circulation des données est devenu un enjeu majeur de confidentialité et de sécurité, notamment dans l’hôpital public français. Dans ce contexte, les administrateurs de bases de données sont amenés désormais à configurer les moteurs pour que les données soient chiffrées entre le client quel qu’en soit la nature et le serveur qui héberge les données.

Génération des jeux de clés

MySQL dispose désormais de la commande mysql_ssl_rsa_setup permettant de générer trois jeux de clés utilisés au niveau du serveur et du client ! Le logiciel génère les 6 fichiers nécessaires à la prise en charge du SSL au niveau MySQL :

/var/lib/mysql/ca-key.pem
/var/lib/mysql/ca.pem
/var/lib/mysql/server-key.pem
/var/lib/mysql/server-cert.pem
/var/lib/mysql/client-key.pem
/var/lib/mysql/client-cert.pem

Après exécution de la commande, songez à rendre l’utilisateur mysql propriétaire de ces fichiers :

chown myslq:mysql /var/lib/mysql/*.pem

Configuration du serveur MySQL

Créez le fichier /etc/mysql/mysql.conf.d/ssl.conf, dans lequel vous devrez ajouter afin de forcer le chiffrement :

[mysqld]
require_secure_transport=ON
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

Relancez MySQL :

systemctl restart mysql

Vous pouvez vérifier que le moteur prend en charge le chiffrement, en vous connectant localement à l’instance MySQL à l’aide de :

mysql -u root -p

Puis, tapez sous l’interpréteur MySQL :

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             | /var/lib/mysql/ca.pem          |
| ssl_capath         |                                |
| ssl_cert           | /var/lib/mysql/server-cert.pem |
| ssl_cipher         |                                |
| ssl_crl            |                                |
| ssl_crlpath        |                                |
| ssl_fips_mode      | OFF                            |
| ssl_key            | /var/lib/mysql/server-key.pem  |
+--------------------+--------------------------------+
17 rows in set (0,00 sec)

Utilisation des clés de chiffrement au niveau du client

Concernant le client, après avoir récupéré dans le répertoire /var/lib/mysql du serveur les fichiers ca.pem, client-key.pem, client-cert.pem vous pouvez chiffrer vos communications avec le serveur en tapant :

mysql --ssl-mode=VERIFY_CA --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u root -p

Sous l’interpréteur MySQL, tapez la commande suivant, afin de vérifier l’algorithme SSL utilisé :

mysql> SHOW SESSION STATUS LIKE 'Ssl_version';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Ssl_version   | TLSv1.2 |
+---------------+---------+
1 row in set (0,00 sec)

Pour configurer une connexion SSL dans MySQL Workbench,  vous devez, au préalable, récupérer les fichiers ca.pem, client-key.pem et client-cert.pem, afin de les stocker sur la station de travail. Complétez ensuite l’onglet SSL au niveau des propriétés de la connexion :

MySQL Workbench > Manage Server Connections > SSL

Cliquez ensuite sur le bouton Test Connection.

MySQL Workbench > Manage Server Connections > SSL > Test Connexion

Source : MySQL > Using Encrypted Connections

MySQL  / Formateur MySQL MySQL SSL