一、前言
1. 为什么要开启mysql ssl加密
mysql 默认采用明文传输数据,数据库账号、密码、执行的sql语句、查询结果均可通过内网抓包直接窃取,存在极大数据泄露风险。
在等保测评、政务、金融、企业生产环境中,数据库传输加密是必过合规项。
ssl/tls 核心价值:
- 全程加密传输,中间人无法窃 听、篡改数据
- 校验服务端证书,防止中间人劫持攻击
- 支持强制ssl连接,彻底杜绝明文访问
2. 环境适配说明
- 数据库版本:mysql 5.7.44(兼容所有5.7.x版本)
- 操作系统:centos7/8、rocky linux(附带windows配置方案)
- 依赖环境:openssl(系统默认预装)
- 适用场景:内网生产、公网数据库、等保合规场景
3. ssl证书文件作用说明
本次部署生成5类核心 pem 证书文件,各司其职:
| 证书文件 | 用途说明 | 使用端 |
|---|---|---|
| ca.pem | ca根证书,用于校验服务端、客户端证书合法性 | 服务端、客户端通用 |
| server-cert.pem | mysql服务端公钥证书 | 数据库服务端 |
| server-key.pem | mysql服务端私钥(核心保密文件) | 数据库服务端 |
| client-cert.pem | 客户端连接公钥证书 | 业务应用、远程客户端 |
| client-key.pem | 客户端连接私钥 | 业务应用、远程客户端 |
二、生成mysql ssl证书(两种方案)
方案一:官方工具一键生成(推荐、零报错)
使用mysql自带 mysql_ssl_rsa_setup 工具,自动生成合规证书,无需手动配置参数。
1. 创建专属证书目录
独立存放证书,不污染数据库数据目录,安全性更高:
# 创建证书目录 mkdir -p /etc/mysql/ssl # 授权mysql用户归属 chown mysql:mysql /etc/mysql/ssl # 收紧目录权限 chmod 700 /etc/mysql/ssl
2. 一键生成全部证书
# yum/rpm 安装mysql 执行此命令 mysql_ssl_rsa_setup --datadir=/etc/mysql/ssl --uid=mysql # 二进制编译安装mysql 执行此命令 # /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/etc/mysql/ssl --uid=mysql
3. 收紧证书文件权限(生产必须)
私钥文件禁止其他用户读取,防止证书泄露:
# 证书仅mysql用户可读可写 chmod 600 /etc/mysql/ssl/*.pem chown mysql:mysql /etc/mysql/ssl/*.pem # 查看生成文件 ls -l /etc/mysql/ssl/*.pem
方案二:openssl手动生成证书(备用)
无官方工具时,可通过openssl手动生成,有效期10年:
cd /etc/mysql/ssl # 1.生成ca根证书 openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem # 2.生成服务端证书 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3650 -ca ca.pem -cakey ca-key.pem -set_serial 01 -out server-cert.pem # 3.生成客户端证书 openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -req -in client-req.pem -days 3650 -ca ca.pem -cakey ca-key.pem -set_serial 02 -out client-cert.pem # 统一权限 chmod 600 *.pem && chown mysql:mysql *.pem
三、修改mysql配置文件开启ssl
1. 定位配置文件
mysql5.7 配置文件常见路径:/etc/my.cnf、/etc/mysql/my.cnf
2. 写入ssl核心配置
在配置文件 [mysqld] 段落中添加以下内容:
[mysqld] # ssl证书绝对路径 ssl_ca = /etc/mysql/ssl/ca.pem ssl_cert = /etc/mysql/ssl/server-cert.pem ssl_key = /etc/mysql/ssl/server-key.pem # 全局强制加密传输(生产环境必开,禁止明文连接) require_secure_transport = on
3. 重启mysql生效
# systemd 系统 systemctl restart mysqld systemctl status mysqld # 老旧系统 service mysqld restart
排错提示:启动失败90%为证书权限、文件路径错误,重新执行权限授权命令即可。
四、验证mysql ssl开启状态
登录mysql数据库,执行以下sql校验配置是否生效。
1. 查看ssl全局状态
show variables like '%ssl%';
正常结果:
have_ssl = yes(核心标识,代表ssl已开启)have_openssl = yes- 三个证书路径正常显示
若为 disabled,说明配置未生效,需检查配置文件段落、证书权限。
2. 查看当前连接加密状态
# 方式1:简洁查看 show status like 'ssl_cipher'; # 方式2:详细信息 \s
加密连接会显示加密算法(如 aes256-sha),明文连接为空值。
五、客户端ssl连接方式
1. 命令行ssl连接
mysql -h 数据库ip -p3306 -u 用户名 -p \ --ssl-mode=required \ --ssl-ca=/etc/mysql/ssl/ca.pem \ --ssl-cert=/etc/mysql/ssl/client-cert.pem \ --ssl-key=/etc/mysql/ssl/client-key.pem
ssl-mode 权限说明:
disabled:禁用ssl,明文连接preferred:优先ssl,失败降级明文(默认)required:强制ssl,失败拒绝连接(生产推荐)verify_ca:校验ca证书合法性verify_identity:校验证书+主机名(最高安全)
2. springboot/java 项目连接配置
url 开启ssl校验,杜绝明文传输与中间人劫持:
jdbc:mysql://192.168.1.100:3306/testdb?usessl=true&verifyservercertificate=true&serversslcert=/opt/mysql/ssl/ca.pem
六、数据库用户强制ssl登录(高危防护)
单独配置用户权限,指定用户只能通过ssl连接,彻底杜绝明文登录。
1. 新建强制ssl用户
-- 普通加密连接(推荐业务用户使用) create user 'app_user'@'%' identified by 'strongpass123!' require ssl; grant all on testdb.* to 'app_user'@'%'; -- 双向证书校验(高安全场景、管理员账号) create user 'admin'@'%' identified by 'admin@123' require x509; flush privileges;
2. 存量用户修改为强制ssl
# 开启强制ssl alter user 'root'@'%' require ssl; # 取消ssl强制 alter user 'root'@'%' require none; flush privileges;
3. 查询用户ssl权限
select user,host,ssl_type from mysql.user;
ssl_type 为 any 代表强制ssl登录。
七、windows 环境补充配置
windows 版 mysql5.7.44 配置方式基本一致,仅路径格式不同:
1. 生成证书
cmd 进入mysql bin目录执行:
mysql_ssl_rsa_setup.exe --datadir=d:\mysql57\ssl
2. my.ini 配置
[mysqld] ssl_ca = d:\\mysql57\\ssl\\ca.pem ssl_cert = d:\\mysql57\\ssl\\server-cert.pem ssl_key = d:\\mysql57\\ssl\\server-key.pem require_secure_transport = on
八、常见报错与解决方案
1. mysql启动失败:can’t load server-key.pem
原因:证书权限过大、归属用户错误
解决:重新执行权限收紧命令
2. have_ssl=disabled
原因:配置写在 [client] 段落、证书路径错误、未安装openssl
解决:配置必须在 [mysqld] 段落,检查路径与依赖
3. ssl handshake failed
原因:证书不匹配、证书过期、客户端ssl校验等级过高
解决:统一服务端与客户端ca证书,降低ssl-mode等级
九、生产环境最佳实践
- 证书目录独立存放,权限严格设置为 700,私钥文件权限600
- 全局开启
require_secure_transport=on,禁止所有明文传输 - 业务用户配置
require ssl,核心管理员用户使用require x509双向认证 - 应用连接开启证书校验,防止中间人劫持
- 定期轮换ssl证书,避免长期使用同一证书
十、总结
mysql5.7.44 开启ssl加密核心流程:安装依赖→生成ssl证书→收紧权限→配置my.cnf→重启服务验证→客户端适配→用户强制ssl授权。
开启ssl后,可彻底解决数据库明文传输风险,完美适配等保测评、企业生产安全规范,是mysql生产环境必备的安全加固操作。
以上就是mysql 5.7.44开启ssl加密传输的完整实战教程的详细内容,更多关于mysql 5.7.44开启ssl加密传输的资料请关注代码网其它相关文章!
发表评论