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.


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:



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.

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 .


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 )


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.


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.