MySQL5.7增加ssl认证
一、查看MySQL 服务器是否支持 SSL
mysql> show variables like 'have_ssl';
#如果输出结果为 YES,则表示服务器支持 SSL。
mysql> show global variables like '%ssl%';
#可以使用以上命令查看其他ssl相关配置
二、生成证书
通过openssl制作生成证书
1.生成一个CA私钥
openssl genrsa 4096 > ca-key.pem
#生成一个 4096 位的 RSA 私钥,并将其保存在名为 ca-key.pem 的文件中
2.通过CA私钥生成数字证书
openssl req -new -x509 -nodes -days 99999 -key ca-key.pem -out ca.pem
#通过CA私钥生成数字证书ca.pem,“-nodes”表示用于生成一个没有密码的私钥文件,执行命令后依次填写国家-省名-城市-公司-部门-名称-邮箱
3.创建MySQL服务器端私钥和请求证书
openssl req -newkey rsa:4096 -days 99999 -nodes -keyout server-key.pem -out server-req.pem
#执行命令后依次填写国家-省名-城市-公司-部门-服务器名称-邮箱-密码,完成后会生成server-key.pem、server-req.pem两个文件
4.将私钥转换为RSA私钥文件格式
openssl rsa -in server-key.pem -out server-key.pem
#
5.用CA证书生成一个服务器的数字证书
openssl x509 -req -in server-req.pem -days 99999 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
#使用之前生成的 CA 证书和私钥,对服务器证书请求进行签名,生成一个新的 SSL 服务器证书。
x509: 表示生成一个 X.509 证书。
-req: 表示该证书是由证书请求生成的。
-in server-req.pem: 表示输入的 SSL 服务器证书请求。
-days 99999: 表示证书的有效期为 99999 天,即约合 273 年。
-CA ca.pem: 表示使用之前生成的 CA 证书进行签名。
-CAkey ca-key.pem: 表示使用之前生成的 CA 私钥进行签名。
-set_serial 01: 表示设置证书的序列号为 01。
-out server-cert.pem: 表示输出生成的 SSL 服务器证书。
#执行这个命令后,您将获得一个新的 SSL 服务器证书,即 server-cert.pem 文件,它已经被签名并包含了 CA 的签名信息。这个证书将用于配置 SSL 服务器,使其能够通过 SSL 加密方式与客户端进行通信
6.创建客户端的RSA私钥和数字证书
openssl req -newkey rsa:4096 -days 99999 -nodes -keyout client-key.pem -out client-req.pem
7.将生成的私钥转换为RAS私钥文件格式
openssl rsa -in client-key.pem -out client-key.pem
8.用CA证书来生成一个客户端的数字证书
openssl x509 -req -in client-req.pem -days 99999 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
9.查看所有的ssl文件
执行完以上命令后会生成一下文件
ca-key.pem
ca.pem
client-cert.pem
client-key.pem
client-req.pem
server-cert.pem
server-key.pem
server-req.pem
三、配置SSL证书
1.将CA证书和服务端ssl文件存放到证书目录
#创建目录
mkdir /usr/local/mysql/cert
#复制到创建的目录
cp ca.pem server-*.pem /usr/local/mysql/cert
2.修改msql数据库目录的CA证书和服务端ssl文件所属用户和组
chown -R mysql:mysql /usr/local/mysql/
3.修改mysql配置文件,添加ssl调用配置
vi /etc/my.cnf
在mysqld下添加
[mysqld]
ssl-ca=/usr/local/mysql/cert/ca.pem
ssl-cert=/usr/local/mysql/cert/server-cert.pem
ssl-key=/usr/local/mysql/cert/server-key.pem
4.重启mysql服务,检查数据库ssl是否开启状态,have_openssl 与 have_ssl 值都为YES表示ssl开启成功
service mysqld restart
mysql> show global variables like '%ssl%';
四、创建用户并验证
#创建用户并为其指定密码,以及要求其在连接时使用 SSL 加密
CREATE USER 'testuser'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
#授予该用户在 MySQL 服务器上执行任何操作的权限:
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';
#本机登录测试
mysql -uqcroot -h127.0.0.1 -P43306 -p --ssl-cert=client-cert.pem --ssl-key=client-key.pem