MySQL SSL加密

63 阅读2分钟

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_transportuse_sslresult
offoff不使用加密传输
offon若服务器支持 SSL(have_ssl=YES,即已配置证书),则双方会完成 SSL 握手并建立加密连接,数据传输会被加密;若服务器不支持 SSL(have_ssl=DISABLED),则客户端连接会失败(因客户端明确要求 SSL,但服务器无法提供)
onoff连接失败并返回ER_SECURE_TRANSPORT_REQUIRED错误
onon加密传输

3.客户端如何获取服务端证书?

在 SSL 连接的握手阶段,服务器会主动向客户端发送自己的证书(即服务器配置的 ssl_cert 对应的证书文件,如默认的 server-cert.pem),客户端通过以下流程获取并验证证书:

  1. 服务器发送证书:握手开始后,服务器会将自己的公钥证书(包含服务器身份信息、公钥、签发机构等)发送给客户端,客户端由此获取服务端证书。

  2. 客户端验证证书(可选,取决于配置) :客户端收到证书后,会根据自身配置决定是否验证证书的合法性(目的是防止 “中间人攻击”):

    • 若客户端配置了 ssl_ca(指定 CA 根证书路径),则会检查服务端证书是否由该 CA 签发(验证证书链),确保服务端身份真实。
    • 若客户端未配置 ssl_ca(默认可能不配置),则可能跳过证书合法性验证(仅使用证书中的公钥进行加密协商,但不确认服务器身份),此时仍会建立加密连接,但存在被中间人替换证书的风险。