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.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用户归属chownmysql:mysql /etc/mysql/ssl# 收紧目录权限chmod700/etc/mysql/ssl2. 一键生成全部证书# yum/rpm 安装MySQL 执行此命令mysql_ssl_rsa_setup--datadir/etc/mysql/ssl--uidmysql# 二进制编译安装MySQL 执行此命令# /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir/etc/mysql/ssl --uidmysql3. 收紧证书文件权限生产必须私钥文件禁止其他用户读取防止证书泄露# 证书仅mysql用户可读可写chmod600/etc/mysql/ssl/*.pemchownmysql:mysql /etc/mysql/ssl/*.pem# 查看生成文件ls-l/etc/mysql/ssl/*.pem方案二OpenSSL手动生成证书备用无官方工具时可通过openssl手动生成有效期10年cd/etc/mysql/ssl# 1.生成CA根证书openssl genrsa2048ca-key.pem openssl req-new-x509-nodes-days3650-keyca-key.pem-outca.pem# 2.生成服务端证书openssl req-newkeyrsa:2048-days3650-nodes-keyoutserver-key.pem-outserver-req.pem openssl rsa-inserver-key.pem-outserver-key.pem openssl x509-req-inserver-req.pem-days3650-CAca.pem-CAkeyca-key.pem-set_serial01-outserver-cert.pem# 3.生成客户端证书openssl req-newkeyrsa:2048-days3650-nodes-keyoutclient-key.pem-outclient-req.pem openssl rsa-inclient-key.pem-outclient-key.pem openssl x509-req-inclient-req.pem-days3650-CAca.pem-CAkeyca-key.pem-set_serial02-outclient-cert.pem# 统一权限chmod600*.pemchownmysql:mysql *.pem三、修改MySQL配置文件开启SSL1. 定位配置文件MySQL5.7 配置文件常见路径/etc/my.cnf、/etc/mysql/my.cnf2. 写入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 ON3. 重启MySQL生效# systemd 系统systemctl restart mysqld systemctl status mysqld# 老旧系统servicemysqld restart排错提示启动失败90%为证书权限、文件路径错误重新执行权限授权命令即可。四、验证MySQL SSL开启状态登录MySQL数据库执行以下SQL校验配置是否生效。1. 查看SSL全局状态showvariableslike%ssl%;正常结果have_ssl YES核心标识代表SSL已开启have_openssl YES三个证书路径正常显示若为DISABLED说明配置未生效需检查配置文件段落、证书权限。2. 查看当前连接加密状态# 方式1简洁查看showstatuslikeSsl_cipher;# 方式2详细信息\s加密连接会显示加密算法如 AES256-SHA明文连接为空值。五、客户端SSL连接方式1. 命令行SSL连接mysql-h数据库IP-P3306-u用户名-p\--ssl-modeREQUIRED\--ssl-ca/etc/mysql/ssl/ca.pem\--ssl-cert/etc/mysql/ssl/client-cert.pem\--ssl-key/etc/mysql/ssl/client-key.pemssl-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?useSSLtrueverifyServerCertificatetrueserverSslCert/opt/mysql/ssl/ca.pem六、数据库用户强制SSL登录高危防护单独配置用户权限指定用户只能通过SSL连接彻底杜绝明文登录。1. 新建强制SSL用户-- 普通加密连接推荐业务用户使用CREATEUSERapp_user%IDENTIFIEDBYStrongPass123!REQUIRESSL;GRANTALLONtestdb.*TOapp_user%;-- 双向证书校验高安全场景、管理员账号CREATEUSERadmin%IDENTIFIEDBYAdmin123REQUIREX509;FLUSHPRIVILEGES;2. 存量用户修改为强制SSL# 开启强制SSLALTERUSERroot%REQUIRESSL;# 取消SSL强制ALTERUSERroot%REQUIRENONE;FLUSHPRIVILEGES;3. 查询用户SSL权限SELECTuser,host,ssl_typeFROMmysql.user;ssl_type 为ANY代表强制SSL登录。七、Windows 环境补充配置Windows 版 MySQL5.7.44 配置方式基本一致仅路径格式不同1. 生成证书CMD 进入MySQL bin目录执行mysql_ssl_rsa_setup.exe--datadirD:\mysql57\ssl2. 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_sslDISABLED原因配置写在[client]段落、证书路径错误、未安装openssl解决配置必须在[mysqld]段落检查路径与依赖3. SSL handshake failed原因证书不匹配、证书过期、客户端ssl校验等级过高解决统一服务端与客户端CA证书降低ssl-mode等级九、生产环境最佳实践证书目录独立存放权限严格设置为 700私钥文件权限600全局开启require_secure_transportON禁止所有明文传输业务用户配置REQUIRE SSL核心管理员用户使用REQUIRE X509双向认证应用连接开启证书校验防止中间人劫持定期轮换SSL证书避免长期使用同一证书十、总结MySQL5.7.44 开启SSL加密核心流程安装依赖→生成SSL证书→收紧权限→配置my.cnf→重启服务验证→客户端适配→用户强制SSL授权。开启SSL后可彻底解决数据库明文传输风险完美适配等保测评、企业生产安全规范是MySQL生产环境必备的安全加固操作。