最直接的方式是执行 status(或 \s)查看“ssl”行:显示具体加密套件名说明已启用ssl,显示“not in use”则当前会话为明文;权威判断依据是 show status like 'ssl_cipher' 非空即加密。

执行 STATUS 查看当前连接的 SSL 状态
最直接的方式是登录 MySQL 后运行 STATUS(或简写为 \s),观察输出中 “SSL” 一行:
- 若显示
SSL: Cipher in use is TLS_AES_256_GCM_SHA384(或类似具体套件名),说明当前连接已启用 SSL 加密 - 若显示
SSL: Not in use,则无论服务端证书是否配好,该连接都走明文 - 注意:这个结果只反映**当前会话**,不是全局配置状态
查 SHOW STATUS LIKE 'Ssl_cipher' 是否非空
这是判断连接是否加密的权威依据,比 have_ssl 或 ssl_ca 变量更准确:
-
SHOW STATUS LIKE 'Ssl_cipher';返回值为空('')→ 当前连接未加密 - 返回类似
TLS_AES_256_GCM_SHA384的字符串 → 已加密,且可据此确认 TLS 版本和强度 -
SHOW VARIABLES LIKE 'have_ssl';返回YES只表示编译支持,DISABLED也不代表完全不能用——它不反映实际连接状态
确认客户端连接时是否真正启用了 SSL 模式
很多误判源于客户端没显式要求 SSL。即使服务端证书全配好,mysql -u user -p 默认仍走明文:
- 必须加
--ssl-mode=REQUIRED才强制走加密通道(不校验证书) - 若用
--ssl-mode=VERIFY_IDENTITY,还需确保--ssl-ca指向正确 CA 文件,且服务端证书 CN/SAN 匹配你连接的 hostname - 常见错误:
SSL connection error: SSL is required but the server doesn't support it,本质是客户端开了 SSL 模式,但服务端require_secure_transport=OFF且未加载有效证书
注意 localhost 连接的特殊性
用 -h 127.0.0.1 和 -h localhost 表现完全不同:
-
mysql -u user -p -h 127.0.0.1→ 走 TCP,可套 SSL,STATUS中能看见 SSL 状态 -
mysql -u user -p -h localhost→ 默认走 Unix socket(跳过网络栈),SSL: Not in use是正常现象,跟 SSL 配置无关 - 要测试 SSL,务必用 IP 地址或明确指定
--protocol=tcp
SHOW STATUS LIKE 'Ssl_cipher' 的返回值上。其他方式要么是间接线索,要么受连接方式干扰。证书配得再全,只要这一行为空,就等于没加密。











