环境

Redhat 8.6

MySQL 8.0.36

主要变量系统和状态变量

系统变量名称

对应状态变量名称

ssl_ca

Current_tls_ca

ssl_capath

Current_tls_capath

ssl_cert

Current_tls_cert

ssl_cipher

Current_tls_cipher

ssl_crl

Current_tls_crl

ssl_crlpath

Current_tls_crlpath

ssl_key

Current_tls_key

tls_ciphersuites

Current_tls_ciphersuites

tls_version

Current_tls_version

MySQL Server TLS 协议支持(不同MySQL版本需要注意支持协议) 

MySQL 服务器版本

支持的 TLS 协议

MySQL 8.0.15 及以下版本

TLSv1、TLSv1.1、TLSv1.2

MySQL 8.0.16 和 MySQL 8.0.17

TLSv1、TLSv1.1、TLSv1.2、TLSv1.3(组复制除外)

MySQL 8.0.18 到 MySQL 8.0.25

TLSv1、TLSv1.1、TLSv1.2、TLSv1.3(包括组复制)

MySQL 8.0.26 和 MySQL 8.0.27

TLSv1(已弃用)、TLSv1.1(已弃用)、TLSv1.2、TLSv1.3

MySQL 8.0.28 及更高版本

TLSv1.2、TLSv1.3

创建证书

使用 mysql_ssl_rsa_setup 命令自建SSL证书。

调用命令方法,默认使用RSA加密,有效期10年。

使用 mysql_ssl_rsa_setup 生成自签名证书,不支持 VERIFY_IDENTITY 模式。(SOURCE_SSL_VERIFY_SERVER_CERT=1,

相当于mysql客户端命令参数设置:--ssl-mode=VERIFY_IDENTITY )

mkdir /data/mysqlcert

mysql_ssl_rsa_setup --datadir=/data/mysqlcert

chown mysql:mysql -R /data/mysqlcert

chmod 750 -R /data/mysqlcert

要查看 SSL 证书的内容

(例如,要查看 检查其有效日期范围),直接调用 OpenSSL:

openssl x509 -text -in /data/mysqlcert/ca.pem|grep -E "Before|After"
openssl x509 -text -in /data/mysqlcert/server-cert.pem|grep -E "Before|After"
openssl x509 -text -in /data/mysqlcert/client-cert.pem|grep -E "Before|After"

检查应用SSL证书的有效期

mysql> SHOW STATUS LIKE 'Ssl_server_not%';
+-----------------------+--------------------------+
| Variable_name         | Value                    |
+-----------------------+--------------------------+
| Ssl_server_not_after  | Apr 28 14:16:39 2027 GMT |
| Ssl_server_not_before | May  1 14:16:39 2017 GMT |
+-----------------------+--------------------------+

启用SSL加密服务方法

修改配置文件

vi /etc/my.cnf

[mysqld]
tls_version = TLSv1.2,TLSv1.3
ssl-ca = /data/mysqlcert/ca/ca-cert.pem
ssl-cert = /data/mysqlcert/ca/server-cert.pem
ssl-key = /data/mysqlcert/ca/server-key.pem
ssl_session_cache_mode = ON
ssl_session_cache_timeout = 600

重用 SSL 会话, 可以已降低因认证造成的开销,要求运行时缓存中具有会话未超时。

ssl_session_cache_mode = ON

默认300秒调整到600秒,如果没有大量用户连接断开,可以再增加缓存时间。

ssl_session_cache_timeout = 600

重启服务

systemctl restart mysqld

检查错误日志

tail -n20 /data/mysqllogs/mysql-error.log

自建SSL会有提示[Warning] [MY-010068] [Server] CA certificate /data/mysqlcert/ca/ca.pem is self signed.忽略

启用加密会有如下提示

[MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.