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 

Commentaires

Top !

C’était dans ma to do list d’apprentissage d’sql & de sécurisation d’un serveur.
Merci pour le partage !

Étant très novice : on est d’accord que cela est applicable aussi pour mariadb ?

Faut juste enregistrer le ssl.conf dans un dossier différent, en cohérence avec l’organisation des dossiers de mariadb ?

@pytolux

Je n’ai pas regardé pour MariaDB.

Suite à votre retour.
Je viens de découvrir une plateforme jira pour mariadb.

En voyant un ticket ouvert sur ssl_rsa_setup je suppose qu’il est toujours en cours :

https://jira.mariadb.org/browse/MDEV-16219?jql=text%20~%20%22ssl_rsa_setup%22

Hello,

J’ai cherché de mon côté pour MariaDB mais pas l’impression que ça soit embarqué dans l’immédiat (le ticket Jira est même pas assigné :( ). Reste à voir la licence du script, mais vu que ça se résume principalement à enchaîner les commandes openssl pour créer les différents certifs et clés, y’a pas de raison d’avoir peur. Sinon faut s’y coller ? :D

@Sébastien

Je vais tâcher de regarder. Promis.

Laisser un commentaire

(requis)

(requis)