2017-05-19 2 views
0

J'ai démarré un projet utilisant MySQL dans le cloud et j'ai besoin de lui établir une connexion SSL pour le client en ligne de commande MySQL.Génération de clés SSL pour la connexion cryptée du client en ligne de commande MySQL

J'ai reçu le fichier ca.pem du serveur MySQL qui contient une tonne de certificats.

J'ai déjà trié la connexion SSL dans MySQL Workbench et Java, après avoir essayé différentes choses. J'ai maintenant tous les certificats dans le magasin de confiance cacerts de mon installation Java, et j'ai configuré Java et Workbench pour trouver mes clés SSL publiques/privées dans mon magasin client.jks.

Rien de tout cela n'aide le client MySQL en ligne de commande. Selon les docs MySQL Configuring MySQL to use Secure Connections, c'est la façon de le lancer:

mysql --ssl-ca=ca.pem \ 
    --ssl-cert=client-cert.pem \ 
    --ssl-key=client-key.pem 

et ces params peut être mis en my.cnf pour rendre la ligne de commande plus facile.

Et cela m'a dit certaines de ce que je devais savoir: MySQL on Amazon RDS, c'est-à-dire comment pointer mysql sur la ligne de commande pour le certificat de serveur. C'était facile, étant donné que la procédure Java m'obligeait à importer tout le lot dans le magasin de certificats Java en utilisant un outil de ligne de commande qui ne lisait que le premier certificat et ignorait silencieusement le reste. Donc après tout faff avec Java, et dès le début ayant une paire de clés publique/privée pour ssh, il m'est apparu qu'il serait judicieux de garder toutes mes clés ensemble et en fait même de réutiliser la même clé pour créer les autres formats dont j'ai besoin.

Selon Converting a Java Keystore into PEM Format Je devrais être en mesure de faire cela, ou peut-être devrais-je plutôt utiliser les touches SSH? Ils partagent tous le même pays/état/localité/org/unité/nom/email.

Les docs MySQL Creating SSL Certificates and Keys Using OpenSSL dit que je dois faire ceci:

openssl req -newkey rsa:2048 -days 3600 \ 
    -nodes -keyout client-key.pem -out client-req.pem 
openssl rsa -in client-key.pem -out client-key.pem 
openssl x509 -req -in client-req.pem -days 3600 \ 
    -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem 
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem 

Cela pose un problème parce que je ne générait pas les certificats AWS et je ne suis qu'un fichier .pem à partir de là. Peut-être que AWS ca.pem et server-cert.pem sont tous les deux dans le fichier pem - devinez que je pourrais vérifier mais je vais devoir aller chercher les informations sur l'autorité de signature de l'autorité de certification qu'ils utilisent pour reconnaître le certificat CA . Et je suppose que le 'server-cert' est la clé publique de l'hôte réel que j'ai.

Mais ça ne marche pas, je reçois l'erreur suivante:

$ openssl.exe x509 -req -in client-req.pem -days 3600 
     -CA rds-combined-ca-bundle.pem -CAkey rds-combined-ca-bundle.pem 
     -set_serial 01 -out client-cert.pem 
Signature ok 
subject=/C=UK/ST=LN/L=LN/O=X/OU=XYZ/CN=xyz/[email protected] 
Getting CA Private Key 
unable to load CA Private Key 
4294956672:error:0906D06C:PEM routines:PEM_read_bio:no start 
     line:pem_lib.c:707:Expecting: ANY PRIVATE KEY 

Répondre

0

Transforme les certificats SSL sont un faux problème. Vous n'en avez pas besoin. Tout ce que vous avez besoin est ceci:

mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com 
    --ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-verify-server-cert 

Il est Cygwin et le client Windows standard MySQL ne joue pas bien ensemble, d'où la pendaison en essayant de commencer: connecting to mysql from cygwin