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