MySQL数据库环境:
MySQL 8.0.26 MySQL Community Server - GPL 单实例
1、安装初始化mysql数据库:
在datadir目录下有相关的SSL证书文件,如果没有则创建之:
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/pemtmp --uid=mysql
2、配置文件:
vi my.cnf
[mysql]
ssl-ca = /data/mysql/pemtmp/ca.pem
ssl-cert = /data/mysql/pemtmp/client-cert.pem
ssl-key = /data/mysql/pemtmp/client-key.pem
[mysqld]
require_secure_transport = ON
ssl-ca = /data/mysql/pemtmp/ca.pem
ssl-cert = /data/mysql/pemtmp/server-cert.pem
ssl-key = /data/mysql/pemtmp/server-key.pem
3、创建用户并指定ssl:
create user yqg@'%' identified with mysql_native_password by 'qaz123';
alter user 'yqg'@'%' require ssl;
grant all privileges on *.* to 'yqg'@'%';
flush privileges;
4、验证:
mysql -h172.17.139.155 -P3306 -uyqg -p'qaz123'
mysql> \s
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
5、测试总结:
移除datadir目录下的ssl相关证书文件,数据库也可正常启动。
5.1> 是“require ssl”用户无法访问数据库:
mysql -h172.17.139.155 -P3306 -uyqg -p'qaz123'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'yqg'@'172.17.135.234' (using password: YES)
5.2> 无“require ssl”的用户无法访问数据库:
mysql -h172.17.139.155 -P3306 -usqg -p'qaz123'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
5.3> 如果去掉my.cnf文件中的require_secure_transport=ON:
是“require ssl”用户无法访问数据库
无“require ssl”的用户可以访问数据库
6、附录
证书文件:
ca-key.pem # CA私钥
ca.pem # 自签的CA证书,客户端连接也需要提供
client-cert.pem # 客户端连接服务器端需要提供的证书文件
client-key.pem # 客户端连接服务器端需要提供的私钥文件
private_key.pem # 私钥/公钥对的私有成员
public_key.pem # 私钥/公钥对的共有成员
server-cert.pem # 服务器端证书文件
server-key.pem # 服务器端私钥文件
MySQL查看ssl配置以生效及相关信息:
show global variables like '%ssl%';
have_ssl | YES
MySQL查看ssl证书的有效时间:
SHOW STATUS LIKE 'Ssl_server_not%';