必须先验证MySQL服务端SSL真实状态:执行SHOW VARIABLES LIKE 'have_ssl'返回YES且ssl_cipher非空,再确认ssl_ca/cert/key为绝对路径、文件存在、mysqld有读权限,并重启服务而非reload。
很多配置失败的根源在于:服务端看似配了证书,但 ssl_cipher 为空、have_ssl 为 DISABLED,或仅 reload 未重启。必须先验证真实状态:
SHOW VARIABLES LIKE 'have_ssl';,返回 YES 才代表编译支持;若为 DISABLED,说明证书路径无效或权限不足SHOW VARIABLES LIKE 'ssl%';,重点看 ssl_ca、ssl_cert、ssl_key 是否指向绝对路径,且文件存在、MySQL 进程(如 mysql 用户)有读权限ssl_cipher 非空(如 DHE-RSA-AES256-SHA)才是 SSL 真正生效的标志;仅配置路径不重启 mysqld,该值仍为空my.cnf 中的证书路径不能用相对路径、环境变量或符号链接——MySQL 启动时直接读取,不解析上下文。
[mysqld] 段写入三行,路径必须完整:ssl_ca = /var/lib/mysql/ca.pem、ssl_cert = /var/lib/mysql/server-cert.pem、ssl_key = /var/lib/mysql/server-key.pem
server-key.pem 必须无密码(生成时加 -nodes),否则启动失败,错误日志里会出现 SSL error: Unable to get private key
systemctl restart mysql(不是 reload),否则变更不加载服务端开了 SSL ≠ 客户端自动加密。默认行为仍是明文,必须主动要求。
--ssl-mode=REQUIRED,例如:mysql -u user -p --ssl-mode=REQUIRED -h db.example.com
--ssl-ca=/path/to/ca.pem;否则会报错 SSL connection error: Certificate verification failed
pymysql 或 Go 的 mysql 驱动),需在 DSN 里显式设置 ssl_mode=REQUIRED 或传入 ssl 字典,不能只依赖服务端配置CREATE USER 'u'@'%' IDENTIFIED BY 'p' REQUIRE SSL; 只约束该用户,但其他用户仍可明文连接,且该用户若不带 SSL 参数仍会拒绝连接——它不改变协议默认行为。
require_secure_transport=ON(MySQL 5.7+),该参数让所有连接(无论用户)都必须走 SSL/TLS 或 Unix socketrequire_secure_transport=ON 后,本地 mysql -u root -p(无 host)可能失败,因默认走 socket;需显式加 --protocol=tcp 并提供 SSL 参数STATUS;,看输出里 SSL: 行是否显示具体 cipher;或查 SELECT * FROM performance_schema.status_by_thread WHERE VARIABLE_NAME = 'Ssl_cipher';
实际生效的关键不在“配了多少”,而在 ssl_cipher 是否非空、ssl_mode 是否被客户端明确传递、以及私钥是否真的没密码——这三个点漏掉任何一个,连接都会静默降级到明文。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)