Après avoir créé un certificat SSL auto-signé, j'ai configuré mon serveur MySQL distant pour les utiliser (et SSL est activé)
Je ssh dans mon serveur distant, et j'essaye de me connecter à son propre mysqld en utilisant SSL (le serveur MySQL est 5.5.25) ..
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Ok, je me souviens d'avoir lu un problème avec la connexion au même serveur via SSL. Je télécharge donc les clés client dans ma boîte locale et je teste à partir de là ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
Il est difficile de savoir à quoi se réfère cette erreur "Erreur de connexion SSL", mais si j'omet le -ssl-ca
, je peux me connecter en utilisant SSL.
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
Cependant, je pense que cela ne fait que crypter la connexion, et non pas vérifier la validité du certificat (ce qui signifie que je serais potentiellement vulnérable à une attaque d'homme au milieu)
Les certificats SSL sont valides (bien qu'auto-signés) et ne comportent pas de phrase secrète. Alors ma question est, qu'est-ce que je fais mal? Comment puis-je me connecter via SSL, en utilisant un certificat auto-signé?
La version du serveur MySQL est 5.5.25 et le serveur et les clients sont CentOS 5.
Merci pour tout conseil
Edit : Notez que dans tous les cas, la commande est émise à partir du même répertoire où résident les clés SSL (donc pas de chemin absolu)
Edit (en réponse à mgorven):
ca.cert
est le certificat de l'autorité de certification, qui est censé dire à mysql que mon autorité de certification est approuvée.
La configuration de my.cnf
est -
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
J'ai également essayé d'ajouter, ssl-cipher=DHE-RSA-AES256-SHA
mais je l'ai supprimé depuis car cela n'a pas aidé.
ca.cert
? S'agit-il du certificat auto-signé du serveur? Utilisez-vous des certificats clients pour l'authentification? Veuillez fournir la configuration liée à SSL sur le serveur.Réponses:
Oui, vous avez raison: si vous ne le spécifiez pas,
--ssl-ca
le client ne vérifie pas du tout le certificat du serveur. Puisqu'il fonctionne sans cette option, la raison la plus probable de l'échec est que le client ne fait pas confiance au certificat du serveur.Si vous utilisez des certificats client et serveur auto-signés, le
ca.cert
fichier doit inclure ces deux fichiers. De cette façon, le client fera confiance au certificat de serveur et le serveur fera confiance au certificat de client.Par exemple:
Générez la clé de serveur et le certificat:
Générez la clé client et le certificat:
Combinez les certificats client et serveur dans le fichier de certificats CA:
la source
Pour utiliser ssl unidirectionnel, vous devez essayer avec:
Le
--ssl-cert
et--ssl-key
sur le client mysql sont utilisés pour SSL bidirectionnel. Cela signifie une authentification basée sur un certificat. L'objet du certificat client doit être le nom d'utilisateur.la source
--ssl-verify-server-cert
du CN du certificat de serveur doit être le même que l'hôte que vous spécifiez pour l'option de ligne de commande -h.Par hasard, n'avez-vous pas entré le même nom commun pour les certificats de serveur et de client? Si oui, remplacez l'un d'eux pour que les noms communs soient différents.
la source