MySQL 5.7.44开启SSL加密传输的完整实战教程
作者:瑶总迷弟
一、前言
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加密传输的资料请关注脚本之家其它相关文章!
