MySQL启用SSL连接

1.手动创建自认证证书

1.1 创建CA证书

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 \
 -key ca-key.pem -out ca.pem 

1.2 创建服务端证书,去除加密,使用CA签名

    server-cert.pem = public key, server-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 \
 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

1.3 创建客户端证书,去除加密,使用CA签名

    client-cert.pem = public key, client-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 \
 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

1.4 证书生成后,进行校验:

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

2.修改my.cnf文件,mysqld下面增加如下配置项

[mysqld]
ssl-ca=/home/mysql/sslconfig/ca.pem
ssl-cert=/home/mysql/sslconfig/server-cert.pem
ssl-key=/home/mysql/sslconfig/server-key.pem

说明:pem配置文件中在test目录下有,但是最好自己生成
/home/mysql/mysql-5.5.35-linux2.6-x86_64/mysql-test/std_data

3.重启数据库

/etc/init.d/mysqld restart

4.登陆验证

4.1查看服务器变量have_ssl,是否支持SSL

SHOW VARIABLES LIKE 'have_%ssl';
SHOW VARIABLES LIKE '%ssl%';
如果为yes,表示服务端已经开启SSL
查看服务ssl等状态
SHOW STATUS LIKE 'Ssl_cipher';
STATUS或者\s
SSL: Cipher in use is DHE-RSA-AES256-SHA表示客户端已经 使用SSL连接

4.2客户端登陆

客户端无SSL登陆:

mysql -uroot -pzdh1234 或者 mysql -uroot -pzdh1234 --ssl=0

客户端开启SSL登陆:

mysql -uroot -hlocalhost -pzdh1234 --ssl-ca=/home/mysql/sslconfig/ca.pem

4.3创建用户强制使用SSL登陆:

GRANT ALL PRIVILEGES ON . TO 'ssluser'@'%' IDENTIFIED BY 'zdh1234' REQUIRE SSL;
本机登陆需要单独新增localhost
GRANT ALL PRIVILEGES ON . TO 'ssluser'@'localhost' IDENTIFIED BY 'zdh1234' REQUIRE SSL;
查看用户:
select host,user,password from mysql.user;
修改密码,需要重启mysql:

update user set password=password("zdh1234") where user="root" and host='zdh-11';

客户端无SSL登陆:

mysql -ussluser -pzdh1234

返回错误:ERROR 1045 (28000): Access denied for user 'ssluser'@'localhost' (using password: YES)
客户端开启SSL登陆:

mysql -ussluser -hlocalhost -pzdh1234 \
 --ssl-ca=/home/mysql/sslconfig/ca.pem

如果不填密码或者--ssl-ca都无法登陆

mysql -ussluser -hlocalhost -pzdh1234 \
 --ssl-cert=/home/mysql/sslconfig/client-cert.pem \
 --ssl-key=/home/mysql/sslconfig/client-key.pem
 
mysql -ussluser -hlocalhost -pzdh1234 \
 --ssl-ca=/home/mysql/sslconfig/ca.pem \
 --ssl-cert=/home/mysql/sslconfig/client-cert.pem \
 --ssl-key=/home/mysql/sslconfig/client-key.pem

4.4客户端连接时校验服务端认证:

由于创建server使用的服务器域名为zdh-11
校验失败,无法登陆:

mysql -uroot -hlocalhost -pzdh1234  --ssl-ca=/home/mysql/sslconfig/ca.pem --ssl-verify-server-cert

校验成功,可以登陆:

mysql -uroot -hzdh-11 -pzdh1234 --ssl-ca=/home/mysql/sslconfig/ca.pem --ssl-verify-server-cert
要为MySQL数据库建立SSL连接,需要完成以下步骤: 1. 准备SSL证书和密钥文件: 首先,你需要为服务器和客户端准备SSL证书和密钥。这通常包括CA(证书颁发机构)证书、服务器证书、服务器私钥以及可选的客户端证书和客户端私钥。 2. 配置MySQL服务器使用SSL: 接下来,你需要在MySQL服务器配置文件(通常是`my.cnf`或`my.ini`)中指定SSL相关的配置项,确保服务器被配置为接受SSL连接。例如: ``` [mysqld] ssl-ca=/path/to/ca.pem ssl-cert=/path/to/server-cert.pem ssl-key=/path/to/server-key.pem ``` 其中`ssl-ca`指向CA证书文件,`ssl-cert`指向服务器证书文件,`ssl-key`指向服务器私钥文件。 3. 启动MySQL服务器并验证配置: 重启MySQL服务,然后使用以下命令检查服务器是否已经正确配置SSL连接: ``` SHOW VARIABLES LIKE 'have_ssl'; ``` 如果输出为`YES`,表示SSL支持已经启用。 4. 客户端配置SSL连接: 客户端连接时需要指定使用SSL。如果你使用命令行客户端,可以通过以下方式指定SSL参数: ``` mysql -h hostname -u username -p --ssl-ca=/path/to/ca.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem ``` 如果客户端不需要使用特定的客户端证书,那么可以省略与客户端证书相关的参数。 5. 连接并验证SSL连接连接成功后,可以运行以下命令来验证当前连接是否为SSL连接: ``` SHOW STATUS LIKE 'Ssl_cipher'; ``` 如果该命令返回了SSL加密的相关信息,说明当前连接是通过SSL进行的。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值