mysql 5.7开启ssl

本文详细介绍如何在CentOS 6.6环境下配置MySQL使用SSL加密连接,包括生成密钥文件、配置my.cnf文件、创建必须使用SSL登录的用户等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


转载自:https://blog.youkuaiyun.com/tanweii163/article/details/50102769

环境

CentOS6.6 X86_64

操作

使用脚本工具生成密钥文件

/usr/bin/mysql_ssl_rsa_setup

执行完成后,data目录下生成密钥文件

-rw-r--r--. 1 root    root   451 11月 28 12:26 public_key.pem
-rw-------. 1 root    root  1.7K 11月 28 12:26 private_key.pem
-rw-r--r--. 1 root    root  1.1K 11月 28 12:26 client-cert.pem
-rw-------. 1 root    root  1.7K 11月 28 12:26 client-key.pem
-rw-r--r--. 1 root    root  1.1K 11月 28 12:26 server-cert.pem
-rw-------. 1 root    root  1.7K 11月 28 12:26 server-key.pem
-rw-r--r--. 1 root    root  1.1K 11月 28 12:26 ca.pem
-rw-------. 1 root    root  1.7K 11月 28 12:26 ca-key.pem

生成密钥文件后注意权限,特别是root运行此脚本,mysql用户启动

chown -R mysql:mysql *.pem

文件说明:

ca.pem               Self-signed CA certificate
ca-key.pem           CA private key
server-cert.pem      Server certificate
server-key.pem       Server private key
client-cert.pem      Client certificate
client-key.pem       Client private key
启动时产生RSA密钥对
private_key.pem      Private member of private/public key pair
public_key.pem       Public member of private/public key pair
参考http://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html
使用ssl连接http://dev.mysql.com/doc/refman/5.7/en/using-ssl-connections.html

客户端证书导出
# sz ca.pem
# sz client-cert.pem
# sz client-key.pem

添加ssl参数到my.cnf配置文件

[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
#【关闭ssl】
#skip_ssl

[client]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem

启动mysql server

bin/mysqld_safe &

注意观察日志文件,是否添加ssl参数后报错,ssl无法启动。

验证服务端是否默认开启ssl

登入mysql服务器,查看have_ssl为YES即可。

mysql> show variables like '%ssl%';
+---------------+-----------------------------------+
| Variable_name | Value                             |
+---------------+-----------------------------------+
| have_openssl  | YES                               |
| have_ssl      | YES                               |
| ssl_ca        | /opt/mysql01/data/ca.pem          |
| ssl_capath    |                                   |
| ssl_cert      | /opt/mysql01/data/server-cert.pem |
| ssl_cipher    |                                   |
| ssl_crl       |                                   |
| ssl_crlpath   |                                   |
| ssl_key       | /opt/mysql01/data/server-key.pem  |
+---------------+-----------------------------------+
9 rows in set (0.00 sec)

客户端连接

bin/mysql -uroot -h 192.168.31.84 -p
(最好使用远程连接进行测试,localhost或者-S unix socket连接,这种有可能不会用ssl。)
mysql> status
--------------
bin/mysql  Ver 14.14 Distrib 5.7.9, for Linux (x86_64) using  EditLine wrapper

Connection id:      10
Current database:   
Current user:       root@192.168.31.84
SSL:            Cipher in use is DHE-RSA-AES256-SHA
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;

status中SSL中显示Cipher in use,表明当前连接使用ssl
或者查看状态Ssl_cipher也可以,Value不为空,表明客户端连接启用ssl
mysql> show status like 'ssl_cipher';                                                                                                                
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA |
+---------------+--------------------+
1 row in set (0.00 sec)

如果客户不想使用ssl连接,可以在mysql连接参数中使用-ssl=0来禁用ssl连接,执行效果请自行使用status查看
bin/mysql -uroot  -h 192.168.31.84 --ssl=0 -p

创建必须使用ssl登录的用户

如果服务器不强制要求用户使用ssl连接,则用户可以使用普通方式,也可以使用ssl方式连接服务器。某些安全场合,可以限制用户必须ssl登录。

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

创建ssltest测试用户,密码为foodsafe,必须ssl登录。


测试
[root@vtfsdb1 mysql01]# bin/mysql -u ssltest -h 192.168.31.84 --ssl=0 -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'ssltest'@'192.168.31.84' (using password: YES)
如果不使用ssl登录,尽管密码正确,也会提示Access denied。

系统用户表user与ssl

系统权限表mysql.user中,表现为ssl_type有值,如果不要求则为空。

修改用户不需要ssl

alter user 'ssltest'@'%' require none;

mysql> select user,ssl_type,ssl_cipher from mysql.user where user='ssltest';
+---------+----------+------------+
| user    | ssl_type | ssl_cipher |
+---------+----------+------------+
| ssltest |          |            |
+---------+----------+------------+
1 row in set (0.00 sec)

修改用户需要ssl

 alter user 'ssltest'@'%' require ssl;
 mysql> select user,ssl_type,ssl_cipher from mysql.user where user='ssltest';
+---------+----------+------------+
| user    | ssl_type | ssl_cipher |
+---------+----------+------------+
| ssltest | ANY      |            |
+---------+----------+------------+
1 row in set (0.00 sec)

修改完成记得flush privileges;

FAQ

【故障】:Mysql 启动报错 “mysqld.service holdoff time over, scheduling restart”

【解决】:# chown mysql:mysql -R /var/lib/mysql
                 # service mysqld restart

【故障】: yum install -y cyrus-sasl-sql.x86_64
报错需要:libmysqlclient.so.18(libmysqlclient_18)(64bit)

【解决】:rpm -ivh /home/mysql/mysql-community-libs-compat-5.7.22-1.el7.x86_64.rpm
                 yum install -y cyrus-sasl-sql.x86_64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值