Today I embarked into the adventure of setting up SSL connections for MySQL replication and got side-tracked by some pretty bad (or possibly just outdated) documentation out there. I won't actually detail how to do things here, but rather just point out that you should use steps documented in the official documentation, especially if you're creating your own self-signed CA cert and a pair of client/server certs signed by that CA.
Documentation for CA + pair of self-signed certificates:
https://dev.mysql.com/doc/refman/5.5/en/creating-ssl-certs.html
Documentation for replication setup:
https://dev.mysql.com/doc/refman/5.5/en/replication-solutions-ssl.html
Some tricks are actually really handy to test your setup:
To verify whether your current connection is encrypted or not:
mysql> \s
mysql Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (i686) using readline 6.2
Connection id: 29220 Current database:
Current user: test@your.server.com SSL: Cipher in use is DHE-RSA-AES256-SHA [...]To connect to a server via ssl (supposing the certificate files exist -- the client certificate/key pair must be signed by the same CA as the server's):
mysql --ssl-ca=/etc/ssl/local/mysql.ca.crt --ssl-cert=/etc/ssl/local/mysql-client.crt --ssl-key=/etc/ssl/local/mysql-client.key -h your.server.com -u test -p
To verify whether SSL configuration was successful in mysql:
mysql> show variables like '%ssl%'; +---------------+---------------------------------+ | Variable_name | Value | +---------------+---------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/ssl/local/mysql.ca.crt | | ssl_capath | | | ssl_cert | /etc/ssl/local/mysql-server.crt | | ssl_cipher | | | ssl_key | /etc/ssl/local/mysql-server.key | +---------------+---------------------------------+ 7 rows in set (0.02 sec)