您的位置:首页 > 数据库 > MySQL

mysql 5.7使用ssl连接

2015-11-29 23:34 656 查看

mysql 5.7使用ssl连接

mysql 57使用ssl连接

环境

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

添加ssl参数到mycnf配置文件

启动mysql server

验证服务器是还开启ssl

客户端连接

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

系统用户表user与ssl

其他

说明

环境

CentOS6.6 X86_64

操作

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

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运行此脚本,mysql01用户启动mysql这种
chown -R mysql01:mysql ./data

文件说明:
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


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

添加ssl参数到my.cnf配置文件
[mysqld]
ssl-ca=/opt/mysql01/data/ca.pem
ssl-cert=/opt/mysql01/data/client-cert.pem
ssl-key=/opt/mysql01/data/client-key.pem

[mysql]
ssl-ca=/opt/mysql01/data/ca.pem
ssl-cert=/opt/mysql01/data/client-cert.pem
ssl-key=/opt/mysql01/data/client-key.pem


启动mysql server

bin/mysqld_safe &

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


验证服务器是还开启ssl

登入mysql服务器,查看have_ssl,如果为YES,恭喜你,服务器开始支持ssl连接了。

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;


其他

windows下连接测试,下次再说。

说明

所有相关的目录,链接,参数,ip等请根据实际情况自行调整。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: