MySQL - [16] SSL

MySQL8的SSL功能可以帮助用户更安全地管理数据库,提高数据安全性。

 

一、SSL概念

SSL(Secure Socket Layer:安全套接字)利用数据加密,身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议。

SSL协议提供的功能主要有:

(1)数据传输的机密性:利用对称密钥算法对传输的数据进行加密

(2)身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的

(3)消息完整性验证:消息传输过程中使用MAC算法来校验消息的完整性。

如果用户的传输不是通过SSL的方式,那么其在网络中数据都是以明文进行传输的。

在数据库方面,客户端连接服务器使用SSL连接,能加密通信数据。

(1)启动SSL:可以在MySQL配置文件中启用SSL,需要指定SSL证书、私钥和CA证书的路径。

(2)SSL握手验证:MySQL8支持SSL握手验证,可以确保客户端连接到正确的服务器。

(3)SSL客户端认证:MySQL8支持客户端证书认证,可以进一步增强安全性。

(4)SSL连接限制:可以通过修改MySQL配置文件中的参数来限制SSL连接的最大数量和连接的最大并发数。

 

 

二、MySQL实现SSL的流程

(1)先为MySQL服务器创建SSL证书和私钥

(2)在MySQL里面配置SSL,并启动服务

(3)创建用户的时候带上SSL标签(require ssl)

(4)连接数据库的时候带上SSL

 

三、MySQL配置SSL

3.1、SSL策略

--ssl-mode是MySQL命令行客户端的一个选项,用于指定SSL/TLS连接的模式。

可供选择的值:DISABLED(禁用SSL)、REQUIRED(必须使用SSL)、VERIFY_CA(验证CA)、VERIFY_IDENTITY(验证身份)

3.2、创建证书

(1)安装openssl依赖包:yum install -y openssl

(2)查看openssl版本:openssl version

(3)生成SSL连接所需RSA密钥对

mysql_ssl_rsa_setup --datadir=/var/lib/mysql --user=mysql --uid=mysql
# datadir: 指定数据库文件路径
# user、uid:指定运行mysql_ssl_rsa_setup命令的用户

会在datadir目录下自动生成以下文件

(1)ca-key.pem:CA证书私钥文件,用于生成SSL连接所需的服务器和客户端证书。
(2)ca.pem:CA证书公钥文件,用于验证SSL连接中服务器和客户端证书的合法性。
(3)client-cert.pem:客户端证书,在SSL连接中用于验证客户端的身份。
(4)client-key.pem:客户端证书的私钥,用于加密和解密SSL连接中客户端发送的数据。
(5)private_key.pem:私钥文件,用于加密和解密SSL连接中的数据。
(6)public_key.pem:公钥文件,用于验证SSL连接中的数据。
(7)server_cert.pem:服务器证书,用于验证MySQL数据库服务器的身份。
(8)server_key.pem:服务器证书的私钥,用于加密和解密SSL连接中服务器发送的数据。

 

3.3、配置证书

(1)配置my.ini文件

[mysqld]
# 指定CA证书公钥文件的路径
ssl-ca=/path/to/ca.pem
# 指定mysql服务器证书的路径
ssl-cert=/path/to/server_cert.pem
# 指定mysql服务器证书的私钥路径
ssl-key=/path/to/server_key.pem

[client]
# 指定CA证书公钥文件的路径
ssl-ca=/path/to/ca.pem
# 指定mysql客户端证书的路径
ssl-cert=/path/to/client_cert.pem
# 指定mysql客户端证书的私钥路径
ssl-key=/path/to/client_key.pem

(2)重启mysql服务:systemctl restart mysqld

 

3.4、检查SSL配置

(1)查看MySQL服务器是否支持SSL:SHOW VARIABLES LIKE 'have_ssl';

Tips:如果输出显示 have_ssl 的值为 YES,则表明MySQL支持SSL。

(2)查看全局变量中包含"SSL"字符的所有变量名和值:show global variable like "%SSL%";

(3)查看tls安全传输版本:show global variables like "tls_version";

(4)检查SSL证书和密钥是否已被配置:SHOW VARIABLES LIKE 'ssl%';

Tips:查看输出结果中是否有ssl_ca、ssl_cert和ssl_key等变量存在,并且这些变量的值不为空,表示SSL配置已经存在。

(5)检查当前的连接是否使用了SSL:SHOW STATUS LIKE 'Ssl_cipher';

Tips:如果Ssl_cipher的值不是NULL或空字符串,那么当前连接正在使用SSL。

(6)检查当前连接使用的SSL版本和协议:

SHOW STATUS LIKE 'Ssl_version';
SHOW STATUS LIKE 'Ssl_session_reuses';

(7)检查SSL会话状态

SHOW STATUS LIKE 'Ssl_accept_renegotiates';
SHOW STATUS LIKE 'Ssl_accepts';
SHOW STATUS LIKE 'Ssl_connect_renegotiates';
SHOW STATUS LIKE 'Ssl_connected';
SHOW STATUS LIKE 'Ssl_server_not_finished';

 

3.5、配置SSL用户

(1)创建用户普通认证方式

-- 创建用户
create user 用户名@'%' identified by '密码';
-- 给用户赋权
grant all on *.* to 用户名@'%';
-- 应用权限配置
flush privileges;
-- 查看用户权限
select user,host,ssl_type,ssl_cipher from mysql.user;

(2)创建用户强制证书认证

-- require ssl强制用户使用证书认证
create user 用户名@'%' identified by '密码' require ssl;
-- require x509强制用户使用证书认证
create user 用户名@'%' identified by '密码' require x509;
-- 给用户授权
grant all on *.* to 用户名@'%';
-- 应用权限配置
flush privileges;
-- 查看用户权限
select user,host,ssl_type,ssl_cipher from mysql.user;

(3)设置用户强制证书登录

-- 设置强制ssl
alter user user0001@'%' require ssl;
-- 取消强制ssl
alter user user0001@'%' require none;

 

3.6、SSL登录

(1)加密登录方法1

# --ssl-mode=disable: 表示关闭SSL加密模式
mysql -uroot -p --ssl-mode=disable
# 登录mysql后查看加密模式
status

# --ssl-ode=required: 标识强制开启SSL加密模式
mysql -uroot -p --ssl-mode=required
# 登录mysql后查看加密模式
status

(2)加密登录方法2

# 指定CA证书及客户端证书及私钥
mysql -uroot -p --ssl-ca=/var/lib/mysql/ca.pem \
--ssl-cert=/var/lib/mysql/client-cert.pem \
--ssl-key=/var/lib/mysql/client-key.pem

 

 

 

— 业精于勤荒于嬉,行成于思毁于随 —

posted @ 2024-07-05 11:09  HOUHUILIN  阅读(15)  评论(0编辑  收藏  举报