CentosOS6.8配置客户端使用SSL方式连接MySQL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nimasike/article/details/82557558

CentosOS6.8配置客户端使用SSL方式连接MySQL

MySQL安装完成后默认只允许localhost本地连接,如果允许其它机器远程连接,MySQL默认的传输方式是明文的,不安全。

那么如何保证数据的安全性?

1:内网物理隔离,数据库不对外开放连接,只允许内网连接,如:阿里云服务器的内网就是物理隔离的。

2:让客户端已SSL方式连接MySQL服务器,加密传输,保证安全性。


检查MYSQL当前的SSL状态

1、登录MySQL

mysql -u root -p -h 127.0.0.1

2、查看SSL状态

mysql> SHOW VARIABLES LIKE '%ssl%';

+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_crl       |          |
| ssl_crlpath   |          |
| ssl_key       |          |
+---------------+----------+

have_openssl 和 have_ssl 俩个变量显示DISABLED表示 SSL功能在安装MYSQL的时候已经编译,但是没有开启。

3、检查当前连接状态

mysql> \s
 

--------------
mysql  Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using  EditLine wrapper

Connection id:		3
Current database:	
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.7.23-log MySQL Community Server (GPL)
Protocol version:	10
Connection:		127.0.0.1 via TCP/IP
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
TCP port:		3306
Uptime:			15 min 51 sec
--------------

上面的信息显示SSL(SSL:Not in use)没有被使用,使用的是普通的TCP连接。

4、退出MySQL

mysql> exit


创建证书的和密钥

1、在配置mysql支持SSL之前,我们需要创建证书和密钥,mysql_ssl_rsa_setup是mysql提供的一个工具,方便我们生成证书和密钥,当然你也可以自己生成,但是如果对证书密码等技术不是非常熟悉的话还是建议用MySQL的工具。

mysql_ssl_rsa_setup --uid=mysql

(加--uid=mysql)是为了生成的文件所属用户和组都是mysql

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'
-----

2、在mysql的数据库目录查看生成的文件

find /var/lib/mysql -name '*.pem' -ls

133048    4 -rw-r--r--   1 mysql    mysql         451 Sep  9 13:25 /var/lib/mysql/public_key.pem
133054    4 -rw-r--r--   1 mysql    mysql        1107 Sep  9 13:25 /var/lib/mysql/server-cert.pem
133055    4 -rw-------   1 mysql    mysql        1675 Sep  9 13:25 /var/lib/mysql/client-key.pem
133049    4 -rw-------   1 mysql    mysql        1675 Sep  9 13:25 /var/lib/mysql/ca-key.pem
133051    4 -rw-r--r--   1 mysql    mysql        1107 Sep  9 13:25 /var/lib/mysql/ca.pem
133047    4 -rw-------   1 mysql    mysql        1679 Sep  9 13:25 /var/lib/mysql/private_key.pem
133057    4 -rw-r--r--   1 mysql    mysql        1107 Sep  9 13:25 /var/lib/mysql/client-cert.pem
133052    4 -rw-------   1 mysql    mysql        1675 Sep  9 13:25 /var/lib/mysql/server-key.pem

ca.pem CA的根证书

ca-key.pem CA的私钥

service-key.pem  MySQL服务端用的私钥

service-cert.pem MYSQL服务端用的证书(由CA的私钥签发)

client-key.pem 双向认证时的客户端私钥

client-cert.pem双向认证时的客户端证书(由CA的私钥签发)

private_key.pem  public_key.pem当没有使用SSL连接时,客户端连接传输密码时用RSA进行加密时用的 密钥对。


测试客户端是否使用SSL连接MySQL

1、重启MySQL

[root@gexin mysql]# service mysqld restart

2、登录

[root@gexin mysql]# mysql -u root -p -h 127.0.0.1

3、查看SSL状态

mysql> SHOW VARIABLES LIKE '%ssl%';

+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+

have_openssl和have_ssl已经为YES,并且也显示了我们刚才创建的证书,一个私钥和一个证书(server-cert.pem server-key.pem)。

4、查看当前连接状态

mysql> \s
 

Connection id:		3
Current database:	
Current user:		root@localhost
SSL:			Cipher in use is DHE-RSA-AES256-SHA
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.7.23-log MySQL Community Server (GPL)
Protocol version:	10
Connection:		127.0.0.1 via TCP/IP
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
TCP port:		3306
Uptime:			3 min 36 sec

SSL: Cipher in use is DHE-RSA-AES256-SHA 当前连接已经是SSL的了,并且显示了密码套件。


设置客户端连接方式

1、MySQL配置了SSL以后,它同时支持俩种连接方式,即普通明文方式和SSL方式。

2、设置MySQL强制要求客户端使用SSL连接。

vim /etc/my.conf

require_secure_transport=ON

3、测试MySQL的Navicat for MySQL客户端

如果不勾选SSL会报错。

4、JAVA客户端连接(mysql驱动用的8.0.12)

jdbc:mysql://192.168.80.111:3306/mytest?verifyServerCertificate=false&useUnicode=true&useSSL=true

useSSL=true 使用SSL连接

verifyServerCertificate=false 对证书不做验证,由于我们的证书是自己签发的,在验证证书时会报错。

verifyServerCertificate=true 如果检查证书,需要把CA的根证书导入到JDK,安全级别相对高一下,不过比较麻烦。

参考

https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-16-04

技术交流群

212320390

猜你喜欢

转载自blog.csdn.net/nimasike/article/details/82557558
今日推荐