当前位置: 代码网 > it编程>数据库>Mysql > MySQL 5.7.44开启SSL加密传输的完整实战教程

MySQL 5.7.44开启SSL加密传输的完整实战教程

2026年07月16日 Mysql 我要评论
一、前言1. 为什么要开启mysql ssl加密mysql 默认采用明文传输数据,数据库账号、密码、执行的sql语句、查询结果均可通过内网抓包直接窃取,存在极大数据泄露风险。在等保测评、政务、金融、企

一、前言

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.pemca根证书,用于校验服务端、客户端证书合法性 服务端、客户端通用
server-cert.pemmysql服务端公钥证书数据库服务端
server-key.pemmysql服务端私钥(核心保密文件)数据库服务端
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等级

九、生产环境最佳实践

  1. 证书目录独立存放,权限严格设置为 700,私钥文件权限600
  2. 全局开启 require_secure_transport=on,禁止所有明文传输
  3. 业务用户配置 require ssl,核心管理员用户使用require x509 双向认证
  4. 应用连接开启证书校验,防止中间人劫持
  5. 定期轮换ssl证书,避免长期使用同一证书

十、总结

mysql5.7.44 开启ssl加密核心流程:安装依赖→生成ssl证书→收紧权限→配置my.cnf→重启服务验证→客户端适配→用户强制ssl授权

开启ssl后,可彻底解决数据库明文传输风险,完美适配等保测评、企业生产安全规范,是mysql生产环境必备的安全加固操作。

以上就是mysql 5.7.44开启ssl加密传输的完整实战教程的详细内容,更多关于mysql 5.7.44开启ssl加密传输的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com