MariaDB MySQL 使用自签名SSL连接

2022年12月30日 1593点热度 0人点赞 0条评论

查看是否支持 SSL

首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL:

当 have_ssl 为 YES 时, 表示此时 MySQL 服务已经支持 SSL 了. 如果是 DESABLE, 则需要启用 MySQL 的 SSL 功能.

使用 OpenSSL 创建 SSL 证书和私钥

新建一个目录用于存放生成的证书和私钥

警告:

ca和server、client的值必须不一致!
server、client的Common Name的值必须不一致!
server、client的其它值必须一致!

// 生成一个 CA 私钥
openssl genrsa 2048 > ca-key.pem
// 使用私钥生成一个新的数字证书,执行这个命令时, 会需要填写一些问题, 请注意填写!!!
openssl req -sha1 -new -x509 -nodes -days 3650 -key ./ca-key.pem > ca-cert.pem
Country Name (2 letter code) [XX]:aa
State or Province Name (full name) []:a
Locality Name (eg, city) [Default City]:a
Organization Name (eg, company) [Default Company Ltd]:a
Organizational Unit Name (eg, section) []:a
Common Name []:a
Email Address []:a
// 创建服务器端RSA 私钥和数字证书,这个命令会生成一个新的私钥(server-key.pem), 
// 同时会使用这个新私钥来生成一个证书请求文件(server-req.pem).
// 这个命令同样需要回答几个问题, 不过需要注意的是, A challenge password 这一项需要为空
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem
Country Name (2 letter code) [XX]:bb
State or Province Name (full name) []:b
Locality Name (eg, city) [Default City]:b
Organization Name (eg, company) [Default Company Ltd]:b
Organizational Unit Name (eg, section) []:b
#这里必须和client的不一样,必须和ca的不一样
Common Name []:b
Email Address []:b
A challenge password []:
An optional company name []:
// 将生成的私钥转换为 RSA 私钥文件格式
openssl rsa -in server-key.pem -out server-key.pem

// 使用原先生成的 CA 证书来生成一个服务器端的数字证书
openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
// 创建客户端的 RSA 私钥和数字证书
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem
Country Name (2 letter code) [XX]:bb
State or Province Name (full name) []:b
Locality Name (eg, city) [Default City]:b
Organization Name (eg, company) [Default Company Ltd]:b
Organizational Unit Name (eg, section) []:b
#这里必须和server的不一样,其他的必须和server的一样!
Common Name (eg, your name or your server's hostname) []:c
Email Address []:b
A challenge password []:
An optional company name []:
//将生成的私钥转换为 RSA 私钥文件格式
openssl rsa -in client-key.pem -out client-key.pem

//为客户端创建一个数字证书
openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

生成的文件如下:

ca-cert.pem: CA 证书, 用于生成服务器端/客户端的数字证书.
ca-key.pem: CA 私钥, 用于生成服务器端/客户端的数字证书.
server-key.pem: 服务器端的 RSA 私钥
server-req.pem: 服务器端的证书请求文件, 用于生成服务器端的数字证书.
server-cert.pem: 服务器端的数字证书.
client-key.pem: 客户端的 RSA 私钥
client-req.pem: 客户端的证书请求文件, 用于生成客户端的数字证书.
client-cert.pem: 客户端的数字证书.

接下来我们就需要分别配置服务器端和客户端

服务器端配置

服务器端需要用到三个文件, 分别是: CA 证书, 服务器端的 RSA 私钥, 服务器端的数字证书, 我们需要在 [mysqld] 配置域下添加如下内容:

[mysqld]
ssl-ca=/data/mariadb/certs/ca-cert.pem
ssl-cert=/data/mariadb/certs/server-cert.pem
ssl-key=/data/mariadb/certs/server-key.pem

修改证书权限:

chown -R mysql:mysql certs/

修改完成后重启 MySQL,重新执行命令:

SHOW VARIABLES LIKE '%ssl%';

如执行结果为:

表示已成功启用SSL。

当配置好后, 我们需要重启 MySQL 服务
最后一步, 我们添加一个需要使用 SSL 才可以登录的帐号, 来验证一下我们所配置的 SSL 是否生效:

GRANT ALL PRIVILEGES ON *.* TO 'ssltest'@'%' IDENTIFIED BY 'ssl_test' REQUIRE SSL;
FLUSH PRIVILEGES;

当配置好后, 登录 MySQL

mysql -h127.0.0.1 -ussltest -p --ssl-ca=./ca-cert.pem --ssl-cert=./client-cert.pem --ssl-key=./client-key.pem

路灯

这个人很懒,什么都没留下

文章评论