• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

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

MySQL 5.7 彭东稳 7年前 (2016-11-24) 26002次浏览 已收录 0个评论

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

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

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

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

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

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

通过 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 进行连接则报错:

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

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

可以看到不允许连接的。

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

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

相关的参数,还有这些:

  • 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 命令来创建各类公密钥,具体可以查看相关官方文档。

<参考>

https://mp.weixin.qq.com/s/dQwREG5OOvy1haVG3JHBkg


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!