MySQL服务器和客户机启用SSL


一、创建Server SSL证书和私钥

1.自动方式:

/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/home/mysql/data

2.手动方式:

首先,创建一个临时的工作目录,我们将把私钥和证书文件放在该目录下。

$ sudo mkdir /home/mysql/data
$ cd /home/mysql/data

检查Linux发行版在默认情况下都安装了OpenSSL。

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

现在,继续创建CA私钥和证书。填好字段

$ openssl genrsa 2048 > ca-key.pem
$ openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

下一步是为服务器创建私钥。

$ openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem

填写上一步中提供的相同答案。

下一步,使用下面这个命令,将服务器的私钥导出成RSA类型的密钥。

$ openssl rsa -in server-key.pem -out server-key.pem

最后,使用CA证书,创建服务器证书。

$ openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

 

客户端SSL证书

在服务器的CA私钥和证书驻留于其中的MySQL服务器主机上运行下列命令。

$ openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem

类似服务器端配置,上述命令会询问几个问题。只管填好字段,就像前面所做的那样。

我们还需要将创建的客户机私钥转换成RSA类型,如下所示。

$ openssl rsa -in client-key.pem -out client-key.pem

最后,我们需要使用服务器的CA私钥和证书,创建客户机证书。

$ openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

二、配置MySQL服务器上的SSL

1.检查一下SSL选项已被启用还是被禁用。

mysql> SHOW GLOBAL VARIABLES LIKE 'have_%ssl';

2. 使用文本编辑工具,打开服务器的my.cnf配置文件。添加或去掉注释[mysqld]部分中类似下面内容的几行。这些应该指向你放在/etc/mysql-ssl中的私钥和证书。

[mysqld]

ssl-ca=/home/mysql/data/ca-cert.pem

ssl-cert=/home/mysql/data/server-cert.pem

ssl-key=/home/mysql/data/server-key.pem

[client]

ssl-ca=/home/mysql/data/ca-cert.pem

ssl-cert=/home/mysql/data/client-cert.pem

ssl-key=/home/mysql/data/client-key.pem

3. 重启MySQL服务。

$ sudo service mysql restart
或
$ sudo systemctl restart mysql
或
$ sudo /etc/init.d/mysql restart

你只要查看MySQL错误日志文件(比如/home/mysql/mysql.log),就可以检查SSL配置有没有问题。

创建拥有SSL权限的用户

服务器端的SSL配置完成后,下一步就是创建有权通过SSL访问MySQL服务器的用户。为此,登录进入到MySQL服务器,输入下面内容:

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘ssluser’@’%’ IDENTIFIED BY ‘password‘ REQUIRE SSL;
mysql> FLUSH PRIVILEGES;

把“ssluser”(用户名)和“password”(密码)换成你自己的用户名和密码。