HomePage » Database » MySQL » MysqlSSL


Enable SSL for MySQL

Make sure your MySQL has ssl support. To check,
SHOW VARIABLES LIKE '%ssl%';

If have_ssl or have_openssl says NO, you don't have ssl support. If it says DISABLED, you have ssl support. On freebsd, you can recompile MySQL with ssl support via ports. Simply go to the port directory and do make WITH_OPENSSL=YES install clean

From MySQL's doc, one should check ssl support with the command. The following tells you ssl support is absent.
shell> mysqld --ssl --help
060525 14:18:52 [ERROR] mysqld: unknown option '--ssl'


Creating the certificates
Go to /var/db/mysql, generate a CA certificate
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem


Next, create a server certificate
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem


Next, create a client certificate
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem


Now edit your my.cnf and add ssl configirations
my.cnf
[client]
ssl-ca=/var/db/mysql/ca-cert.pem
ssl-cert=/var/db/mysql/client-cert.pem
ssl-key=/var/db/mysql/client-key.pem

[mysqld]
ssl-ca=/var/db/mysql/ca-cert.pem
ssl-cert=/var/db/mysql/server-cert.pem
ssl-key=/var/db/mysql/server-key.pem


You probably want to put the client configurations on your client machine, and vice versa. When a connection is established, you can check your connection by

mysql> \s
--------------
mysql  Ver 14.12 Distrib 5.0.22, for redhat-linux-gnu (i686) using readline 5.0

Connection id:          8
Current database:
Current user:           root@192.168.18.198
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.37
Protocol version:       10
Connection:             192.168.18.192 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
TCP port:               3306
Uptime:                 53 min 36 sec

Threads: 2  Questions: 8  Slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6  Queries per second avg: 0.002
--------------

mysql> show status like 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA | 
+---------------+--------------------+
1 row in set (0.01 sec)


There you have an SSL-enabled MySQL connection.

There are 5 comments on this page. [Display comments]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki