MySQL服务端SSL需用mysql_ssl_rsa_setup生成证书并配置ssl_ca、ssl_cert、ssl_key三项路径及require_secure_transport=ON,否则仍为明文连接;验证须查Ssl_cipher或Ssl_version非空。
MySQL 服务端 SSL 不会自动启用,哪怕你生成了证书文件,只要没加、路径写错、权限不对,或者是,连接就还是明文。
怎么快速生成可用的证书文件(推荐 MySQL 8.0+ 内置工具)
MySQL 8.0 自带
,比手敲 OpenSSL 命令更可靠,不会漏掉
或搞错格式。
停掉 MySQL:先确保
未运行,或确认数据目录可写(如
)
切换到 MySQL 用户执行:
检查生成结果:
,必须看到
、
、
三个文件
权限必须是
,且属主为
;否则
mysql
d 启动时静默跳过 SSL 初始化
my.cnf 中哪些配置项不能少、不能写错
只写
或只写两个参数,SSL 就算“半启用”——
仍返回
。
必须在
段完整指定三项绝对路径:
、
、
必须加
(MySQL 5.7.17+ 支持),否则客户端用
仍能连上明文连接
MySQL 8.0 可额外加
,5.7 不识别该参数,加了会启动失败
改完配置必须重启
,MySQL 启动时只读一次配置
验证 SSL 是否真生效,别只看 have_
ssl
=YES
只说明 MySQL 编译支持 SSL 且证书加载没报错,不代表连接已加密。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
连接后立即执行:
,确认输出含
且非空
或查状态变量:
,有值(如
)才算真正启用了加密通道
如果
为空,常见原因是客户端没强制走 SSL(比如用 Navicat 连接时没勾选“使用 SSL”),不是服务端配错了
错误日志(
)里出现
,基本是路径错、权限不足或 OpenSSL 库不可用
客户端连接时最容易忽略的三个点
服务端开了 SSL,不代表客户端自动加密。不显式要求,就等于白配。
命令行连接必须加参数:
;
是最常用安全模式,
不校验证书,风险高
连接字符串中若含
(比如某些 ORM 默认行为),会直接绕过加密
如果服务端证书的
或
不匹配客户端访问的 host(比如用
连,但证书 CN 是
),客户端会报
真正卡住人的从来不是生成证书那几步,而是证书路径被 SELinux 拦截、
权限是
被 mysqld 拒绝读取、或者客户端连的时候根本没传
——这些地方一错,
看着像 YES,实际流量全是明文。
require_secure_transport = ONhave_sslDISABLEDmysql_ssl_rsa_setupsubjectAltNamemysqld/var/lib/mysqlsudo -u mysql mysql_ssl_rsa_setup --datadir=/var/lib/mysqlls -l /var/lib/mysql/*.pemca.pemserver-cert.pemserver-key.pemserver-key.pem600mysql:mysqlssl_caSHOW VARIABLES LIKE 'have_ssl'DISABLED[mysqld]ssl_ca = /var/lib/mysql/ca.pemssl_cert = /var/lib/mysql/server-cert.pemssl_key = /var/lib/mysql/server-key.pemrequire_secure_transport = ON--ssl-mode=DISABLEDtls_version = TLSv1.2,TLSv1.3mysqldhave_ssl = YESmysql -u root -p -e "STATUS;" | grep "SSL"Ssl_ciphermysql -e "SHOW STATUS LIKE 'Ssl_version';"TLSv1.3Ssl_cipher/var/log/mysql/error.logSSL error: Unable to get certificate from filemysql -u user -p --ssl-mode=VERIFY_CA --ssl-ca=/path/to/ca.pemVERIFY_CAREQUIRED?ssl-mode=DISABLEDCNsubjectAltName192.168.1.100localhostcertificate verify failedserver-key.pem644--ssl-cahave_ssl