Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL 5.7.44开启SSL加密传输

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

作者:瑶总迷弟

MySQL 默认采用明文传输数据,数据库账号、密码、执行的SQL语句、查询结果均可通过内网抓包直接窃取,存在极大数据泄露风险,因此本文手把手教你为MySQL 5.7.44开启SSL加密传输,从生成SSL证书、修改配置文件到客户端连接与用户强制SSL,一步到位解决数据窃 听风险

一、前言

1. 为什么要开启MySQL SSL加密

MySQL 默认采用明文传输数据,数据库账号、密码、执行的SQL语句、查询结果均可通过内网抓包直接窃取,存在极大数据泄露风险。

在等保测评、政务、金融、企业生产环境中,数据库传输加密是必过合规项。

SSL/TLS 核心价值:

2. 环境适配说明

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%';

正常结果:

若为 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 权限说明:

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加密传输的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文