web-dev-qa-db-fra.com

Impossible de se connecter à mysql en utilisant un certificat SSL signé auto-signé

Après avoir créé un certificat SSL auto-signé, j'ai configuré mon serveur MySQL distant à utiliser (et SSL est activé)

I SSH dans mon serveur distant et essayez de vous connecter à son propre MySQLD à l'aide de SSL (Server 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 de lire il y a un problème de connexion au même serveur via SSL. Donc, je télécharge les clés clientes dans ma zone locale et tester à 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

Son incarcore ce que cette erreur "Erreur de connexion SSL" fait référence à, mais si j'étant -ssl-ca, alors je suis capable de se connecter à l'aide de 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 crypte que la connexion et ne vérifie pas la validité du cert (ce qui signifie que je serais potentiellement vulnérable à l'attaque man-in-moyen)

Les certificats SSL sont valides (bien que auto-signés) et n'ont pas de phrase secrète sur eux. Donc, ma question est de ce que je fais mal? Comment puis-je me connecter via SSL, à l'aide d'un certificat auto-signé?

La version Server 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éside les touches SSL (d'où aucun chemin absolu)

Edit (en réponse à Mgorven): ca.cert est le certificat d'autorité de certification, qui est censé dire à MySQL que mon autorité de certification est de confiance.

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 aussi essayé d'ajouter ssl-cipher=DHE-RSA-AES256-SHA Mais j'ai depuis supprimé cela comme ça n'a pas aidé.

15
carpii

Oui, vous avez raison que si vous ne spécifiez pas --ssl-ca Ensuite, le client ne vérifie pas du tout le certificat de serveur. Comme il fonctionne sans cette option la raison la plus probable de l'échec, c'est que le client ne fait pas confiance au certificat de serveur.

Si vous utilisez des certificats de client et de serveur auto-signé, alors le ca.cert Le fichier doit inclure ces deux fichiers. Ainsi, le client fera confiance au certificat de serveur et le serveur fera confiance au certificat client.

Par exemple :
[.____] Générer la clé de serveur et le certificat:

$ openssl req -x509 -newkey rsa:1024 \
         -keyout server-key-enc.pem -out server-cert.pem \
         -subj '/DC=com/DC=example/CN=server' -passout pass:qwerty

$ openssl rsa -in server-key-enc.pem -out server-key.pem \
         -passin pass:qwerty -passout pass:

Générez la clé cliente et le certificat:

$ openssl req -x509 -newkey rsa:1024 \
         -keyout client-key-enc.pem -out client-cert.pem \
         -subj '/DC=com/DC=example/CN=client' -passout pass:qwerty

$ openssl rsa -in client-key-enc.pem -out client-key.pem \
         -passin pass:qwerty -passout pass:

Combinez les certificats du client et du serveur dans le fichier de certificats CA:

$ cat server-cert.pem client-cert.pem > ca.pem
12
Keith Burdis

Pour utiliser un moyen SSL, vous devriez essayer avec:

mysql -u <user> -p --ssl=1 --ssl-ca=ca.cert --ssl-verify-server-cert

Les --ssl-cert et --ssl-key Sur le client MySQL est utilisé pour 2 voies SSL. Cela signifie une authentification basée sur le certificat. Le sujet du certificat client devrait être le nom d'utilisateur.

3
Mircea Vutcovici

Par une chance, vous n'avez pas entré le même nom commun pour le serveur et les certs clients? Si oui, remplacez l'un d'entre eux afin que les noms communs soient différents.

0
Dmitry Leskov