环境
Redhat 8.6
MySQL 8.0.36
主要变量系统和状态变量
系统变量名称 | 对应状态变量名称 |
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.