0%

Mysql开启SSL加密连接

版本:MySQL8.0

MySQL为了数据的安装性,是支持SSL加密连接的。我们可以配置服务器从而使用ssl加密功能。如果采用的非加密的方式进行通信,那么久很有可能被不法分子窃取敏感信息从而导致泄漏。

1、登录MySQL服务器,查看是否开启ssl功能,含有以下则是开启了。

image-20220220015754378

2、查看用户是否使用了SSL连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> select ssl_type from user where user = 'root' ;
+----------+
| ssl_type |
+----------+
| |
+----------+
1 row in set (0.05 sec)

# 强制root用户使用ssl验证
alter user 'root'@'%' require ssl;
# 取消ssl验证:
alter user 'root'@'%' require none;

# 若是有ANY字样则是开启了SSL验证
mysql> select ssl_type from user where user = 'root' ;
+----------+
| ssl_type |
+----------+
| ANY |
+----------+
1 row in set (0.01 sec)

3、查看user用户表是否对用户远程访问做了限制,若有限制则更改对应权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
表第一行可以看出,root用户值host字段为'%'说明允许所有的主机进行访问。
若是没有如此,则是需要执行以下命令添加相应的权限。
# 创建用户添加远程访问权限(mysql8.0 命令,其他版本可能不一样)
# CREATE USER 'root'@'172.24.1.100' IDENTIFIED BY '你的密码';
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

# 更新权限
FLUSH PRIVILEGES;

4、更改配置文件

1
2
3
4
5
6
7
8
9
# 更改对应的MySQL配置文件/etc/mysql/my.cnf
# 强制ssl验证
# 在[mysqld]下添加如下代码:
require_secure_transport = ON
# 指定服务端密钥和证书路径
# 在[mysqld]下添加如下代码:
ssl-ca = /var/lib/mysql/ca.pem
ssl-cert = /var/lib/mysql/server-cert.pem
ssl-key = /var/lib/mysql/server-key.pem

5、重启MySQL服务

6、有时候需要重新生成证书秘钥等,可以执行以下命令重新生成,但是要注意生成目录下不能存在原密钥,否则不会重新生成。

1
2
3
4
5
6
7
8
9
10
11
# 生成相关证书秘钥等
mysql_ssl_rsa_setup --datadir=/usr/local/mysql5.7/data/ --uid=root
[root@linux-node local]# ll /usr/local/mysql5.7/data/*.pem
ca-key.pem #CA私钥
ca.pem #自签CA证书,客户端连接也需要提供
client-cert.pem #客户端连接服务器端需要提供的证书文件
client-key.pem #客户端连接服务器端需要提供的私钥文件
private_key.pem #私钥/公钥对的私有成员
public_key.pem #私钥/公钥对的共有成员
server-cert.pem #服务器端证书文件
server-key.pem #服务器端私钥文件

通过抓包我们可以看点,MySQL的连接已经开启了加密。

image-20220220023314279
小主,路过打个赏再走呗~