Création de certificats SSL pour MySQL avec openSSL

La création de certificats de sécurité SSL au moyen de openSSL devient assez facile après quelques usages. Voici comment créer des CA (certificate authority) qui permettront une communication SSL entre 2 serveurs MySQL.

 

Installation de openSSL :

aptitude update
aptitude install openssl

 

Créer les certificats SSL (CA)

mkdir /etc/mysql/openssl
cd /etc/mysql/openssl/

Lorsque vous créez vos certificats, certaines questions vous seront posées.
Il est recommandé d’y répondre dans un environnement de production.
Laissez vide pour la question `challenge password` et `suivante` s’il y a lieu.

openssl req -x509 -new -days 9999 -newkey rsa:2048 -nodes -keyout ca-key.pem -out ca-cert.pem

openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out csr.pem

openssl rsa -in key.pem -out key.pem

openssl x509 -req -days 9999 -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -CAserial ca-srl.txt -in csr.pem -out cert.pem

Nous allons maintenant modifier le fichier de configuration mysql :

nano /etc/mysql/my.cnf

Repérez, modifiez et décommentez les 3 ssl dans la section [mysqld]

ssl-ca=/etc/mysql/openssl/ca-cert.pem
ssl-cert=/etc/mysql/openssl/cert.pem
ssl-key=/etc/mysql/openssl/key.pem

cd /etc/mysql
chown -R mysql:mysql openssl
chmod -R 500 openssl

Redémarrer MySQL

/etc/init.d/mysql restart

 

Vérification du support SSL :

mysql> SHOW VARIABLES LIKE '%ssl%';

Si vous voyez ceci, tout est ok!

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
+---------------+-------+

Si vous voyez « DISABLED », veuillez re-créer vos certificats et redémarrer mysql.

ATTENTION! :

Depuis MySQL 5.1.38, il est impossible d'obtenir une connexion encryptée sans le message d'erreur 2026 :
'SSL connection error'

Pour contourner cela, vous devez omettre les options --ssl-cert et --ssl-key lors de vos connexions.
Spécifiez uniquement --ssl-ca

--ssl --ssl-ca=<votre certificat ca>
ou
--ssl --ssl-ca=/dev/null

This Epopée was painful.