编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

MySQL使用客户端证书登录(mysql数据库认证)

wxchong 2024-07-17 05:01:07 开源技术 16 ℃ 0 评论

如何生成生成证书?

使用 openssl req 创建 X.509 证书,下面的命令创建有效期10年的私钥, 生成2个文件:

私钥 wfs-key.pem 和请求证书 wfs-req.pem

openssl req -newkey rsa:2048 -days 3650 -nodes -keyout wfs-key.pem -out wfs-req.pem
Country Name (2 letter code) [XX]:CN
Locality Name (eg, city) [Default City]:KS
Organization Name (eg, company) [Default Company Ltd]:ECI

#其他输出略

生成公钥 ca.pem/ca-key.pem (数据库服务器的自签名的 CA 证书 和 CA 私钥)

 #必须在数据库服务器上执行
openssl x509 -req -in wfs-req.pem -days 3650 -CA /var/lib/mysql/ca.pem -CAkey /var/lib/mysql/ca-key.pem -set_serial 01 -out wfs-cert.pem

校验公钥的有效性 (注: server-cert.pem 是服务器证书)

openssl verify -CAfile /var/lib/mysql/ca.pem /var/lib/mysql/server-cert.pem wfs-cert.pem

创建只有证书没有密码的账号

需要先卸载 component_validate_password 组件后才能创建无密码的账号

use mysql
select * from component;
uninstall component 'file://component_validate_password';
CREATE USER wfs REQUIRE SUBJECT '/C=CN/L=KS/O=ECI';

使用证书登录

这3个文件可用于其他机器 MySQL 客户端或 navicat 使用证书登录

#使用mysql客户端登录
mysql -h 192.168.55.44 -uwfs --ssl-cert wfs-cert.pem --ssl-key wfs-key.pem -p --ssl_ca=/var/lib/mysql/ca.pem
#使用证书登录 mysqlsh
mysqlsh mysql://wfs@192.168.55.44 --ssl-cert wfs-cert.pem --ssl-key wfs-key.pem

使用navicat 登录的话在登录窗口 ssl 页面处分别填入 key, cert, ca


补充:测试下三种认证方式 X509, SSL, none的区别

create user test_x509 identified by '123456' require X509;

create user test_any identified by '123456' require ssl;

create user test_none identified by '123456' require none;

select user,ssl_type from mysql.user; #三个账号 ssl_type 分别为 X509, ANY, 空(默认是require none, 也就是说不写 require字句的话默认是空)

登录

client-cert.pem 和 client-key.pem 在数据库目录

mysql -h 192.168.55.44 -utest_x509 -p123456 --ssl-cert client-cert.pem --ssl-key client-key.pem

mysql -h 192.168.55.44 -utest_any -p123456

mysql -h 192.168.55.44 -utest_none -p123456 --ssl-mode=DISABLED


总结

三个账号均可以使用参数 --ssl-cert --ssl-key 登录, 登录后输入 \s 可以看到使用了 ssl,

test_x509 必须使用参数 --ssl-cert --ssl-key 登录, 否则不能登录

test_any, test_none 可以使用密码登录, 登录后输入 \s 可以看到使用了 ssl,

test_none 可以使用 --ssl-mode=DISABLED, 登录后输入 \s 显示 ssl 未使用,

test_any 不可以使用参数 --ssl-mode=DISABLED

test_none在服务器上通过 IP/127.0.0.1/主机名 登录时, 登录后输入 \s 可以看到使用了 ssl 且通过tcp协议, 通过 localhost 或不指定-h 登录时, 登录后输入 \s 可以看到是通过了socket连接,未使用ssl

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表