Mysql配置SSL

Mysql配置SSL

𝓓𝓸𝓷 Lv6

Mysql配置SSL安全连接

一、SSL简介

SSL(Secure Socket Layer:安全套接字层)利用数据加密、身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证。

SSL协议提供的功能主要有:

  • 数据传输的机密性:利用对称密钥算法对传输的数据进行加密。
  • 身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。
  • 消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。

如果用户的传输不是通过SSL的方式,那么其在网络中数据都是以明文进行传输的,而这给别有用心的人带来了可乘之机。所以,现在很多大型网站都开启了SSL功能。同样地,在我们数据库方面,如果客户端连接服务器获取数据不是使用SSL连接,那么在传输过程中,数据就有可能被窃取。

二、查看Mysql是否配置SSL
1
2
3
4
5
6
7
8
mysql> show variables like 'have%ssl';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
+---------------+----------+
2 rows in set (0.00 sec)
三、配置SSL两种方法
  • OpenSSL创建
  • Mysql_ssl_rsa_setup创建
四、OpenSSL配置SSL

五、Mysql_ssl_rsa_setup配置SSL
1.准备mysql_ssl_rsa_setup工具
1
[root@vip soft]# cp /opt/soft/mysql-5.7.21-linux-glibc2.12-x86_64/bin/mysql_ssl_rsa_setup /usr/local/mysql/bin/

温馨提示: mysql_ssl_rsa_setup在Mysql5.7安装包中,直接copy至Mysql5.6 /usr/local/mysql/bin/

2.执行mysql_ssl_rsa_setup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@vip soft]# mysql_ssl_rsa_setup --user=mysql --datadir=/usr/local/mysql/data
Generating a 2048 bit RSA private key
.......+++
..+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
......+++
...................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
..........................................+++
............................+++
writing new private key to 'client-key.pem'
-----

温馨提示: mysql_ssl_rsa_setup会在data目录生成以.pem结尾的密钥文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@vip soft]# ll /usr/local/mysql/data
total 110668
-rw-rw----. 1 mysql mysql 56 Jan 21 22:00 auto.cnf
-rw-------. 1 root root 1679 Jan 22 18:02 ca-key.pem
-rw-r--r--. 1 root root 1107 Jan 22 18:02 ca.pem
-rw-r--r--. 1 root root 1107 Jan 22 18:02 client-cert.pem
-rw-------. 1 root root 1679 Jan 22 18:02 client-key.pem
-rw-rw----. 1 mysql mysql 12582912 Jan 22 13:17 ibdata1
-rw-rw----. 1 mysql mysql 50331648 Jan 22 13:17 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 Jan 21 21:59 ib_logfile1
drwx------. 2 mysql mysql 4096 Jan 21 21:59 mysql
drwx------. 2 mysql mysql 4096 Jan 21 21:59 performance_schema
-rw-------. 1 root root 1679 Jan 22 18:02 private_key.pem
-rw-r--r--. 1 root root 451 Jan 22 18:02 public_key.pem
-rw-r--r--. 1 root root 1107 Jan 22 18:02 server-cert.pem
-rw-------. 1 root root 1679 Jan 22 18:02 server-key.pem
-rw-rw----. 1 mysql mysql 24939 Jan 22 13:17 vip.err
-rw-rw----. 1 mysql mysql 5 Jan 22 13:17 vip.pid

[root@vip data]# ll *.pem
-rw-------. 1 mysql mysql 1679 Jan 22 23:39 ca-key.pem
-rw-r--r--. 1 mysql mysql 1107 Jan 22 23:39 ca.pem
-rw-r--r--. 1 mysql mysql 1107 Jan 22 23:39 client-cert.pem
-rw-------. 1 mysql mysql 1679 Jan 22 23:39 client-key.pem
-rw-------. 1 mysql mysql 1679 Jan 22 23:39 private_key.pem
-rw-r--r--. 1 mysql mysql 451 Jan 22 23:39 public_key.pem
-rw-r--r--. 1 mysql mysql 1107 Jan 22 23:39 server-cert.pem
-rw-------. 1 mysql mysql 1679 Jan 22 23:39 server-key.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: 客户端的数字证书.
3.分配权限
1
2
3
4
5
[root@vip soft]# cd /usr/local/mysql/data

[root@vip data]# chown mysql:mysql *.pem

温馨提示: 安装完后,需要修改权限为mysql,否则数据库还是显示没有开通SSL.
4.修改my.cnf配置文件
1
2
3
4
5
6
[root@vip mysql]# vim /etc/my.cnf

[mysqld]
ssl-ca=/usr/local/mysql/data/ca.pem
ssl-cert=/usr/local/mysql/data/server-cert.pem
ssl-key=/usr/local/mysql/data/server-key.pem
5.重启Mysql服务
1
2
3
[root@vip data]# mysqladmin -uroot -p shutdown

[root@vip data]# mysqld_safe --user=mysql &
6.检查SSL是否开启
1
2
3
4
5
6
7
8
mysql> show variables like 'have%ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
| have_ssl | YES |
+---------------+-------+
2 rows in set (0.00 sec)
六、客户端SSL连接测试
1.客户端准备证书及密钥文件

将Centos服务器端mysql_ssl_rsa_setup生成的SSL客户端密钥文件copy至Windows客户端,本次客户端使用的是Windows。

需要copy到Windows的证书及密钥文件:

  • /usr/local/mysql/data/ca.pem

  • /usr/local/mysql/data/client-cert.pem

  • /usr/local/mysql/data/client-key.pem

mark

2.服务器端创建SSL用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@vip data]# mysql -uroot -proot
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 5.6.39 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all on mydb.* to admin@'%' identified by 'admin' require ssl;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on mydb.* to john@'%' identified by 'john' require x509;
Query OK, 0 rows affected (0.00 sec)
3.Windows客户端SSL连接centos服务器端
  • require ssl登录
1
2
3

mysql -uadmin -padmin -h 192.168.1.133 --ssl-ca='C:\Program Files\Mysql\data\ca.pem'
mysql -uadmin -padmin -h 192.168.1.133 --ssl-cert='C:\Program Files\Mysql\data\client-cert.pem' --ssl-key='C:\Program Files\Mysql\data\client-key.pem'

mark

  • require x509登录:

mark

温馨提示: SSL状态显示为Cipher in use is DHE-RSA-AES256-SHA,表示当前已经使用SSL连接。

  • Title: Mysql配置SSL
  • Author: 𝓓𝓸𝓷
  • Created at : 2024-06-13 15:16:36
  • Updated at : 2024-07-20 05:15:41
  • Link: https://www.zhangdong.me/mysql-ssl.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
评论