1. 查看当前连接的SSL状态和参数
-- 查看SSL加密算法,如果有值表示使用了SSL
SHOW STATUS LIKE 'Ssl_cipher';
-- `Ssl_cipher` 有值(如 `AES256-SHA`)→ **SSL加密中**
-- `Ssl_cipher` 为空 → **未使用SSL**
-- 查看详细的SSL连接信息
SHOW STATUS LIKE 'Ssl_version';
SHOW STATUS LIKE 'Ssl_cipher_list';
-- 查看是否支持ssl
SHOW VARIABLES LIKE 'have_ssl';`
-- 值为 **`YES`** 表示服务器支持SSL
-- 查看所有SSL相关变量,如证书和密钥路径
SHOW VARIABLES LIKE '%ssl%';
-- 要求客户端与服务端之间是否使用安全传输加密,默认值off
SHOW VARIABLES LIKE '%require_secure_transport%';
2. 服务端require_secure_transport和客户端use_ssl
1. mysql 8.0默认支持ssl,部署后,在data目录生成证书
2. 与客户端的关联
| require_secure_transport | use_ssl | result |
|---|---|---|
| off | off | 不使用加密传输 |
| off | on | 若服务器支持 SSL(have_ssl=YES,即已配置证书),则双方会完成 SSL 握手并建立加密连接,数据传输会被加密;若服务器不支持 SSL(have_ssl=DISABLED),则客户端连接会失败(因客户端明确要求 SSL,但服务器无法提供) |
| on | off | 连接失败并返回ER_SECURE_TRANSPORT_REQUIRED错误 |
| on | on | 加密传输 |
3.客户端如何获取服务端证书?
在 SSL 连接的握手阶段,服务器会主动向客户端发送自己的证书(即服务器配置的 ssl_cert 对应的证书文件,如默认的 server-cert.pem),客户端通过以下流程获取并验证证书:
-
服务器发送证书:握手开始后,服务器会将自己的公钥证书(包含服务器身份信息、公钥、签发机构等)发送给客户端,客户端由此获取服务端证书。
-
客户端验证证书(可选,取决于配置) :客户端收到证书后,会根据自身配置决定是否验证证书的合法性(目的是防止 “中间人攻击”):
- 若客户端配置了
ssl_ca(指定 CA 根证书路径),则会检查服务端证书是否由该 CA 签发(验证证书链),确保服务端身份真实。 - 若客户端未配置
ssl_ca(默认可能不配置),则可能跳过证书合法性验证(仅使用证书中的公钥进行加密协商,但不确认服务器身份),此时仍会建立加密连接,但存在被中间人替换证书的风险。
- 若客户端配置了