一、SSL证书准备
在开始前,首先确保环境已经安装了openssl以及libssl-dev
需要生成一个CA证书,一套服务端加密使用的公钥和私钥,一套客户端传输数据加密使用的公钥和私钥
1. 生成CA证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 36500 -out ca.pem -subj "/C=CN/ST=Shanghai/L=Shanghai/O=MyCompany/OU=IT Dept/CN=MyRootCA"
其中days 参数则意味着证书的有效期限天数,不建议太长,如果是生产环境或者懒得维护,你可以把它设高一点。
这样就成功生成了CA证书,其中ca.key用于签发下属证书认证用途。
你的服务端和客户端的密钥都需要由同一个CA证书签发!
2. 生成服务端公钥私钥
2.1 创建服务端密钥
2.1.1 创建server_ext.cnf文件
填写如下内容
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
DNS.1 = localhost
IP.1 = 127.0.0.1
2.1.2 请注意,DNS.1 和 IP.1都是你服务器本机的地址,如果你有很多域名和公网IP,你可以继续如以下所示追加
IP.2 = 192.168.1.1
不正确的server_ext,尤其是alt_names部分的配置,将导致CA无效!
2.2 生成公钥私钥
其中days 参数则意味着证书的有效期限天数,不建议太长,如果是生产环境或者懒得维护,你可以把它设高一点。
3.1 创建客户端密钥
3.1.1 创建client_ext文件
填写如下内容
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
3.2 生成公钥私钥
4. 将密钥迁移至你认为规范、安全的文件夹,并为他们修改权限。
4.1 移动密钥
4.2 修改拥有者与权限
chown mysql:mysql 你希望的路径/server.key
chmod 600 你希望的路径/server.pem
chmod 600 你希望的路径/server.key
⚠ 错误的权限或路径将导致认证失败或报错。
二、配置文件修改
1 在修改配置文件之前,你应该了解需要修改什么文件,但是你也应该知道默认的配置文件在哪里
可能是/etc/my.cnf 也可能是 /etc/mysql/my.cnf,也有可能 /var/lib/mysql里头但几乎不可能,Windows上的mysql只有你自己清楚了。
1.1 cat命令查看
如果没有看到!includedir 那说明你可以直接在my.cnf里写配置文件,否则你就要去找带有[mysqld]段落的文件,去修改那个文件。
注意 不是[mysql]段落!
我这里提示
!includedir /etc/mysql/mysql.conf.d/
检查之后/etc/mysql/mysql.conf.d/mysql.cnf才是需要修改的文件
2. 修改或覆盖配置文件
需要在[mysqld]段落下方追加
ssl-cert=你放公钥私钥的路径/server.pem
ssl-key=你放公钥私钥的路径/server.key
require_secure_transport=ON
三、登录MySQL控制台修改权限
MySQL语句如下
SELECT user, host, ssl_type FROM mysql.user;
-- 修改用户为强制 SSL(举例 root 用户)
ALTER USER 'root'@'%' REQUIRE SSL;
-- 如果你有多个用户,也可以批量生成命令
SELECT CONCAT('ALTER USER ''', user, '''@''', host, ''' REQUIRE SSL;')
FROM mysql.user
WHERE ssl_type != 'ANY';
四、重启MySQL
* 我不知道你的进程守护或者service名字是mysqld还是mysql, Windows如果注册了service应该在services.msc里重启服务。
登录命令
如果你不启用客户端加密,ssl-cert和ssl-key参数可以缺省。


叨叨几句... NOTHING