MySQL configuré pour SSL, mais SSL est toujours DÉSACTIVÉ ..!

9

J'ai configuré SSL pour MySQL en utilisant le script suivant.

#!/bin/bash
#
mkdir -p /root/abc/ssl_certs
cd /root/abc/ssl_certs
#
echo "--> 1. Create CA cert, private key"
openssl genrsa 2048 > ca-key.pem

echo "--> 2. Create CA cert, certificate"
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

echo "--> 3. Create Server certificate, key"
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

echo "--> 4. Create Server certificate, cert"
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
echo ""
echo 
echo ""

echo "--> 5. Create client certificate, key. Use DIFFERENT common name then server!!!!"
echo ""
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
echo "6. Create client certificate, cert"
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
exit 0

Les fichiers suivants ont été créés:

ca-key.pem             ca-cert.pem
server-req.pem         server-key.pem       server-cert.pem
client-req.pem         client-key.pem       client-cert.pem

Ensuite, j'ai combiné server-cert.pem et client-cert.pem dans ca.pem (j'ai lu dans un post pour le faire ..)

J'ai créé un utilisateur ssl dans MySQL:

GRANT ALL ON  *.* to sslsuer@hostname IDENTIFIED BY 'pwd' REQUIRE SSL;

Ensuite, j'ai ajouté ce qui suit dans my.cnf

[mysqld]
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

Après avoir redémarré le serveur, je me suis connecté à mysql mais SSL n'était toujours pas utilisé :(

mysql -u ssluser -p

SSL:                    Not in use

Même le paramètre have_ssl montrait toujours désactivé .. :(

mysql> show variables like '%ssl%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| have_openssl  | DISABLED                                    |
| have_ssl      | DISABLED                                    |
| ssl_ca        | /root/abc/ssl_certs/ca.pem          |
| ssl_capath    |                                             |
| ssl_cert      | /root/abc/ssl_certs/server-cert.pem |
| ssl_cipher    |                                             |
| ssl_key       | /root/abc/ssl_certs/server-key.pem  |
+---------------+---------------------------------------------+

Ai-je manqué une étape, ou qu'est-ce qui ne va pas ..

Les réponses avec des étapes manquées en détail seront très appréciées.

Rayons de soleil
la source
Quelle version d'OpenSSL utilisez-vous? Et veuillez activer la journalisation des erreurs et des avertissements dans MySQL. Si vous voyez le message d'erreur "impossible de lire la clé privée", vous êtes probablement touché par ce bogue d'une manière ou d'une autre. La création de nouvelles clés + certificats sur un système plus ancien, leur utilisation sur un MySQL récent a résolu le problème pour moi.
gertvdijk
@gertvdijk J'ai utilisé openssl-1.0.1c. Je vérifie les journaux pour l'erreur mentionnée.
Sunrays
Tout d'abord. Vérifiez si mysql prend en charge SSL. mysql --ssl --helpN'oubliez pas non plus de redémarrer mysql après avoir apporté ces modifications à my.cnf
Valentin Bajrami
1
@ val0x00ff oui MySQL prend en charge ssl si la valeur has_ssl est désactivée.
Sunrays
essayez mysql --ssl -u ssluser -pde forcer SSL sur le client. après cela fonctionne, on peut essayer de comprendre pourquoi REQuIRE SSL ne fonctionne pas.
johannes

Réponses:

6

Voir la solution ici: /ubuntu/194074/enabling-ssl-in-mysql

Vous devez convertir les certificats à l'ancien format:

openssl rsa -in client-key.pem -out client-key.pem
openssl rsa -in server-key.pem -out server-key.pem
Pavel Bernshtam
la source
3

Essayez de vérifier ceci:

  • Activez la journalisation des sorties d'avertissement de MySQL et lisez ces entrées de journal réelles.
  • Vérifiez les autorisations du système de fichiers pour permettre à l'utilisateur sous lequel MySQL s'exécute ( mysql?) De lire les fichiers. En /rootje ne pense pas que ce soit le cas par défaut.
  • Apparmor ou SELinux empêche-t-il MySQL de lire les certificats et les clés?
  • Vous pouvez être frappé par un bogue désagréable d'une récente incompatibilité entre OpenSSL et MySQL. Je n'ai pas pu générer de clés sur Ubuntu 12.04 que MySQL pourrait lire, tandis que celles que je génère sur Debian Squeeze fonctionnent correctement.
gertvdijk
la source
2

Sur Ubuntu, vous pouvez vérifier si l' apparmoraccès à vos fichiers cert est bloqué, voir le manuel .

Ensuite, vous devez vérifier les autorisations / la propriété des fichiers et ajouter les droits nécessaires à /etc/apparmor.d/usr.sbin.mysqld. Voir ce fil .

Franc Drobnič
la source
2

J'ai eu ce problème, et cela a aidé à changer la propriété des fichiers .pem:

chown mysql.mysql /var/lib/mysql/*.pem  (or in your case /root/abc/ssl_certs/*.pem)

(De Craig Wright - /ubuntu/194074/enabling-ssl-in-mysql )

btb
la source
Cela a résolu le problème pour moi.
anteatersa
0

Ajoutez le "ssl" dans la [mysqld]section du my.cnffichier comme

ssl
ssl-ca          = /root/abc/ssl_certs/ca.pem
ssl-cert        = /root/abc/ssl_certs/server-cert.pem
ssl-key         = /root/abc/ssl_certs/server-key.pem

puis redémarrez mysql et vérifiez à nouveau. Ça va marcher.

Pratik
la source
0

Je crois que ce problème est dû au fait que vous n'avez pas spécifié correctement les chemins d'accès aux fichiers pour votre certificat CA, votre clé de serveur et votre certificat de serveur. Il doit être dans le format suivant ...

ssl-ca=path/to/repo/mysql-directory/path/to/pem/cacert.pem
ssl-cert=path/to/repo/mysql-directory/path/to/pem/server-cert.pem
ssl-key=path/to/repo/mysql-directory/path/to/pem/server-key.pem

c'est-à-dire que vous avez besoin du FULL FILE PATH des certificats et des clés dans votre dossier d'installation mysql et non d'un chemin relatif '/ root /'.

Voici un exemple de mon installation:

mysql> show variables like '%ssl%';
+---------------+----------------------------------------------------------+
| Variable_name | Value                                                    |
+---------------+----------------------------------------------------------+
| have_openssl  | YES                                                      |
| have_ssl      | YES                                                      |
| ssl_ca        | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/ca.pem         |
| ssl_capath    |                                                          |
| ssl_cert      | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-cert.pem|
| ssl_cipher    |                                                          |
| ssl_key       | C:/wamp64/bin/mysql/mysql5.7.14/etc/certs/server-key.pem |
+---------------+----------------------------------------------------------+

Reportez-vous au lien suivant pour plus d'informations. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-ssl.html

Josh
la source
Ses chemins commencent par un /, ce qui signifie qu'ils sont des chemins complets, pas des chemins relatifs. /root/est le dossier personnel de l'utilisateur root sur un système Unix.
bobpaul