mysql 5.7 ssl 客户端_MySQL 5.7:客户端和服务端默认开启加密连接

本文介绍了MySQL 5.7中如何开启和配置SSL以实现安全的加密通信,确保数据传输的安全性。通过执行`mysql_ssl_rsa_setup`命令生成所需SSL文件,并展示如何检查SSL状态、强制用户使用SSL连接以及5.7版本的默认SSL行为变化。
摘要由CSDN通过智能技术生成

有这么一种需求,就是要求处理敏感字段,比如取出的密码或资金数据用 *** 来表示,那么 DBA 就无法看到这部分的私人数据内容。这本身是一个很不错的安全处理方式,但若 DBA 在本地装一个类似 tcpdump 的工具,则依然能够通过获取得到的包得到想要的数据。因此,除了在程序端进行展示的安全处理,还需在 MySQL 服务器端开启安全的加密通信功能,这时就是 SSL 发挥功能的时候了。

MySQL 5.7 的 SSL 配置与使用,如果仔细阅读 MySQL 5.7 的安装文档 INSTALL-BINARY,会发现 5.7 的安装文档在初始化数据目录之后还额外多做了一个操作,这是之前版本所没有的操作,而该步骤即是对于 SSL 的安装与配置:

shell> bin/mysql_ssl_rsa_setup

1

shell>bin/mysql_ssl_rsa_setup

运行完命令 mysql_ssl_rsa_setup 后会发现数据目录下多出了一些以 pem 结尾的文件,而这些文件就是开启 SSL 连接所需要的文件:

server-cert.pem

server-key.pem

client-cert.pem

client-key.pem

ca.pem

ca-key.pem

public_key.pem

private_key.pem

1

2

3

4

5

6

7

8

server-cert.pem

server-key.pem

client-cert.pem

client-key.pem

ca.pem

ca-key.pem

public_key.pem

private_key.pem

PS:如果你是 yum 安装,那么直接执行 mysql_ssl_rsa_setup,就会在 /var/log/mysql/ 目录下就会生成这些文件。

若这时启动 MySQL 数据库并启动应该可以发现如下状态:

mysql> SHOW VARIABLES LIKE '%ssl%';

+---------------+---------------------------------+

| Variable_name | Value |

+---------------+---------------------------------+

| have_openssl | YES |

| have_ssl | YES |

1

2

3

4

5

6

mysql>SHOWVARIABLESLIKE'%ssl%';

+---------------+---------------------------------+

|Variable_name|Value|

+---------------+---------------------------------+

|have_openssl|YES|

|have_ssl|YES|

该参数表示 MySQL 服务器开启了 SSL 功能,而在 MySQL 5.7 版本下客户端默认就会使用SSL的方式来进行连接(注意:如果使用 socket 连接的话就无法加密),比如:

$ mysql -ubackup -p -h10.0.60.143

mysql> \s

--------------

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

Connection id:13

Current database:

Current user:root@10.0.60.143

SSL:Cipher in use is DHE-RSA-AES256-SHA

1

2

3

4

5

6

7

8

9

$mysql-ubackup-p-h10.0.60.143

mysql>\s

--------------

mysqlVer14.14Distrib5.7.16,forLinux(x86_64)usingEditLinewrapper

Connectionid:13

Currentdatabase:

Currentuser:root@10.0.60.143

SSL:CipherinuseisDHE-RSA-AES256-SHA

通过 STATUS 的 SSL 列就能判断连接的用户是否使用了 SSL,比如上述例子中的 Cipher in use is DHE-RSA-AES256-SHA 就表示当前 root 用户是通过 SSL 的方式进行连接。

当我们在 MySQL 开启 SSL 连接时,在客户端驱动连接时如果也开启了 SSL 连接,那么自然就需要配置相关证书了,不然就会报错;当客户端驱动关闭 SSL 连接时,那么 MySQL 端就不会使用 SSL 连接方式处理了。

若在创建用户时,希望该用户每次必须通过 SSL 方式,则需在创建用户通过 “REQUIRE SSL” 来进行设置,对于上述的 root 用户,可以通过如下方式来进行修改以确保每次通过 SSL 进行连接,强制不使用 SSL 进行连接则报错:

mysql> ALTER USER root@'%' REQUIRE SSL;

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

1

2

3

4

5

mysql>ALTERUSERroot@'%'REQUIRESSL;

QueryOK,0rowsaffected(0.00sec)

mysql>flushprivileges;

QueryOK,0rowsaffected(0.01sec)

或者创建用户时直接指定。

mysql> grant all on *.* to 'root'@'%' identified by '123456' REQUIRE SSL;

1

mysql>grantallon*.*to'root'@'%'identifiedby'123456'REQUIRESSL;

再次登录,但记得连接时关闭 SSL 连接。

$ mysql -uroot -p -h10.0.60.143 --ssl=off

WARNING: --ssl is deprecated and will be removed in a future version. Use --ssl-mode instead.

Enter password:

ERROR 1045 (28000): Access denied for user 'root'@'10.0.60.143' (using password: YES)

1

2

3

4

$mysql-uroot-p-h10.0.60.143--ssl=off

WARNING:--sslisdeprecatedandwillberemovedinafutureversion.Use--ssl-modeinstead.

Enterpassword:

ERROR1045(28000):Accessdeniedforuser'root'@'10.0.60.143'(usingpassword:YES)

可以看到不允许连接的。

从 MySQL 5.7.28 开始默认就开启了 SSL 连接,之前版本需要手动使用工具 mysql_ssl_rsa_setup 来生成”SSL 密钥和证书文件”,以支持 SSL 连接。5.7.28 启动数据库时,会在数据目录自动生成以下文件。

ca-key.pem

ca.pem

client-cert.pem

client-key.pem

private_key.pem

public_key.pem

server-cert.pem

server-key.pem

1

2

3

4

5

6

7

8

ca-key.pem

ca.pem

client-cert.pem

client-key.pem

private_key.pem

public_key.pem

server-cert.pem

server-key.pem

当然,你也可以手动关闭自动生成证书。MySQL 5.7.28 官方默认打开了参数 --auto-generate-certs,用来控制是否自动生成证书。

$ mysql --verbose --help |less

--auto-generate-certs

Auto generate SSL certificates at server startup if --ssl

is set to ON and none of the other SSL system variables

are specified and certificate/key files are not present

in data directory.

(Defaults to on; use --skip-auto-generate-certs to disable.)

1

2

3

4

5

6

7

$mysql--verbose--help|less

--auto-generate-certs

AutogenerateSSLcertificatesatserverstartupif--ssl

issettoONandnoneoftheotherSSLsystemvariables

arespecifiedandcertificate/keyfilesarenotpresent

indatadirectory.

(Defaultstoon;use--skip-auto-generate-certstodisable.)

相关的参数,还有这些:

auto_generate_certs

sha256_password_auto_generate_rsa_keys

sha256_password_private_key_path

sha256_password_public_key_path

Rsa_public_key

早期版本此参数虽然也有,但是默认是关闭的。如果你的 MySQL 源码编译时用 openssl 替代 yassl,那就有这些参数!MySQL 5.7.28 开始也正是因为默认编译时使用了 openssl 替代 yassl,所以官方就默认开启了开启了 SSL。

NOTE

以往 MySQL 社区版默认是使用 yassl 编译,企业版默认使用 openssl 编译,手动编译时可以选择 yassl 或 openssl。

MySQL 5.7.28 开始仅支持 OpenSSL,yassl 被移除了,默认编译用的是 openssl,社区版和企业版支持并且只支持 openssl 作为其 SSL 库。

MySQL 5.6 同样支持以 SSL 的方式进行连接,但是操作相对 5.7 较为复杂,用户需要自己通过 openssl 命令来创建各类公密钥,具体可以查看相关官方文档。

如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值