MySQL SSL配置通过加密通道防止数据窃听,需生成CA证书、服务器证书和私钥,配置服务端SSL参数并重启,强制用户REQUIRE SSL,客户端连接时指定ssl-mode及CA证书路径。

MySQL SSL 配置就是让客户端和服务器之间用加密通道通信,防止密码、数据在传输中被窃听。核心是生成或获取合法的 SSL 证书和密钥文件,并在 MySQL 服务端和客户端正确启用。
准备 SSL 证书和密钥文件
MySQL 要求三类文件:CA 证书(ca.pem)、服务器证书(server-cert.pem)和服务器私钥(server-key.pem)。推荐用 OpenSSL 自签(测试/内网可用),生产环境建议使用受信任 CA 签发的证书。
快速生成自签名证书(在 MySQL 数据目录外安全位置执行):
- 生成 CA 密钥和证书:
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem - 生成服务器私钥和证书请求:
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem - 用 CA 签发服务器证书:
openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
生成后把 ca.pem、server-cert.pem、server-key.pem 放到 MySQL 配置能读取的路径(如 /etc/mysql/ssl/),并确保 MySQL 用户有读权限。
配置 MySQL 服务端启用 SSL
编辑 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/mysqld.cnf),在 [mysqld] 段添加:
- ssl-ca = /etc/mysql/ssl/ca.pem
- ssl-cert = /etc/mysql/ssl/server-cert.pem
- ssl-key = /etc/mysql/ssl/server-key.pem
重启 MySQL:
sudo systemctl restart mysql(或 mysqld)
登录 MySQL 执行:
SHOW VARIABLES LIKE '%ssl%';
确认 have_ssl 为 YES,且 ssl_ca、ssl_cert、ssl_key 显示对应路径。
新生代企业网站管理系统是一款基于php+mysql+smarty的免费开源建站系统。整套系统的设计构造,完全考虑大中小企业类网站的功能要求,网站的后台功能强大,管理简捷,支持模板机制,配置中英文双语言版。通过新生代企业网站管理系统,企业建站者可以轻松构建一个企业网站,让企业用户可以更加便捷了解企业的相关信息与动态;方便快捷地发布企业信息、产品等;更可以十分方便的通过管理平台管理企业的站内新闻、产品
强制用户走 SSL 连接
创建或修改用户时指定 REQUIRE SSL,例如:
- 新建用户:
CREATE USER 'appuser'@'%' IDENTIFIED BY 'pwd123' REQUIRE SSL; - 修改已有用户:
ALTER USER 'appuser'@'%' REQUIRE SSL;
之后该用户连接必须提供客户端证书(可选)或至少启用加密通道。验证是否生效:
SELECT user, host, ssl_type FROM mysql.user WHERE user = 'appuser';
结果中 ssl_type 应为 ANY(表示仅需 SSL 加密,不校验客户端证书)或 X509(要求客户端证书)。
客户端连接启用 SSL
命令行连接示例(Linux/macOS):
mysql -u appuser -p --ssl-mode=REQUIRED -h db.example.com
如果要验证服务器证书(推荐):
mysql -u appuser -p --ssl-mode=VERIFY_IDENTITY --ssl-ca=/path/to/ca.pem -h db.example.com
应用连接时(如 Python PyMySQL)需显式传入 SSL 参数:
ssl={'ca': '/path/to/ca.pem'},并设置 ssl_mode='VERIFY_IDENTITY'。
注意:MySQL 8.0+ 默认 --ssl-mode=REQUIRED,但旧版本或某些客户端可能默认禁用,务必显式指定。









