作者:秦福朗

爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱 IT,喜欢在互联网里畅游,擅长摄影、厨艺,不会厨艺的 DBA 不是好司机,didi~

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


本文目录:

引言 一、MySQL 5.7 未加密连接的情况 1.1 抓包 1.2 MySQL 通过 tcp 进行连接,并执行测试 SQL 1.3 通过 wireshark 解析抓包 二、MySQL 8.0 加密连接 2.1 抓包 2.2 MySQL 通过 tcp 进行连接,并执行测试 SQL 2.3 通过 wireshark 解析抓包 2.4 分析使用 TLS 加密连接握手过程 写在最后

引言社区之前的文章“快速掌握 MySQL 8.0 认证插件的使用”中说道,MySQL 8.0 使用 caching_sha2_password 认证插件进行加密连接,初步介绍了加密连接,本文从网络抓包层面看一下在使用 caching_sha2_password 插件的 MySQL 8.0 是如何进行加密连接的。一、MySQL 5.7 未加密连接的情况环境:

MySQL 5.7.25

tcpdump 4.9.2

wireshark 3.2.2

1.1 抓包

tcpdump -i eth0 -s 0 host 10.186.65.69 and port 3306 -w ./5.7.cap

1.2 MySQL 通过 tcp 进行连接,并执行测试 SQL

shell> mysql -uroot -pxxxx -h10.186.60.73 -P3306

mysql> show databases;

mysql> select * from qinfulang.sbtest1 limit 1;

mysql> exit

1.3 通过 wireshark 解析抓包

从上图可以分析以下信息:从包 9-20 可以看出,没有使用加密连接插件的情况下,在经过抓包工具抓包后,经过 wireshark 就可以直接解析到查询语句,非常不安全。Tips:

此处提供一个小技巧:

在 wireshark 里,编辑-首选项-Protocols-MySQL 里可以设置是否在解析窗口的 info 列里面显示 SQL query 语句以及可以设置 MySQL TCP 默认端口。

二、MySQL 8.0 加密连接环境:

MySQL 8.0.15

tcpdump 4.9.2

wireshark 3.2.2

2.1 抓包

tcpdump -i eth0 -s 0 host 10.186.65.69 and port 3306 -w ./8.0.cap

2.2 MySQL 通过 tcp 进行连接,并执行测试 SQL

shell> mysql_8.0 -uroot -pxxxx -h10.186.60.73 -P3306

mysql> show databases;

mysql> select * from qinfulang.sbtest1 limit 1;

mysql> exit

这里在测试 SQL 之外查看一下 status

mysql> status

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

./mysql Ver 8.0.15 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

Current user: root@10.186.65.69

SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256

Server version: 8.0.15 MySQL Community Server - GPL

Protocol version: 10

Connection: 10.186.60.73 via TCP/IP

TCP port: 3306

可以这里使用的算法为 DHE-RSA-AES128-GCM-SHA256

2.3 通过 wireshark 解析抓包

从上图可以分析以下信息:

2.4 分析使用 TLS 加密连接握手过程

首先,这里为什么是 TLS 而不是 SSL?TLS 为传输层安全性协议,是 MySQL 在客户端与服务器之间进行加密连接的协议。TLS 有时被称为 SSL(安全套接层),但是 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱。TLS 协议通过加密数据来确保在两个通信应用程序之间提供隐私和数据完整性,以便任何第三方都无法拦截通信。它还会验证对等方以验证其身份。通过在两个对等点之间提供安全的通信通道,TLS 协议可以保护消息的完整性并确保其不会被篡改。MySQL 支持多种 TLS 版本协议,此次测试使用 8.0 的 client 为 TLSv1.2。

从 wireshark 中看一下 TLS 握手的步骤:

分步解析:

包 8:从客户端到服务端进行 ClientHello,进行问候通信,来启动整个握手环节。

此处包含:TLS 协议版本号,32 字节的随机数,用于计算 Master secret 及创建加密密钥,客户端用于标识会话的唯一编号 Session ID 以及客户端支持的密码套件列表,打开密码套件列表 Cipher Suites 就能看到 MySQL 8.0 使用的 DHE-RSA-AES128-GCM-SHA256 算法。

包 10:服务器返回的 ServerHello。进行问候返回,

此处包含:服务器版本号,服务器的 32 字节随机数,用于生成 Master secret,用来标识与客户端的 Session ID,服务器和客户端都支持的密码套件,此处为 MySQL 8.0 使用的 DHE-RSA-AES128-GCM-SHA256 算法,还有压缩方式,可选,此处为 null。

包 11:

Certificate:服务器向客户端发送 x.509 证书列表对客户端身份进行验证,证书内包含公钥。

Server Key Exchange:服务器密钥交换,这里发送服务器使用的 DH 参数。

Certificate Request:客户证书申请,此处是服务器希望对客户端进行身份验证发送的信息,包含了所需要的证书类型。

Server Hello Done:服务器打招呼结束,等待客户端返回信息。

包 13:

Certificate:客户端证书。

Client Key Exchange:客户端密钥交换。

此处包含:服务器验证客户端协议版本与原始的 client hello 的消息是否匹配,由客户端生成使用服务端公钥加密的随机数 Pre-master secret 以进行服务器对客户端的身份验证。Change Cipher Spec:客户端通知服务器,所有未来的消息都使用刚刚协商的算法与密钥进行加密传输。

Encrypted Handshake Message:完成 TLS 消息加密,此处数据已使用刚刚协商的密钥与算法进行了加密。

包 14:

New Session Ticket:新的会话标签,记录了加密参数。

Change Cipher Spec:服务器通知客户机,将使用现有的算法和密钥对信息进行加密。

Encrypted Handshake Message:完成 TLS 消息加密,客户端成功解密并验证了信息,服务器就成功通过了身份验证。

到此 TLS 消息加密握手过程结束,后面 Application Date 即为加密后的数据流。写在最后MySQL 8.0 的加密插件在使用中兼顾了安全与性能,建议使用默认开启,在 MySQL 8.0.16 后支持 TLSv1.3 协议。目前网络上尝试过对 TLS 解密的手法,经笔者测试均不能在 wireshark 上解密 MySQL 8.0 的 TLS 加密消息。如果有新手法,可留言交流。如果要进行一些 wireshark 对 MySQL 抓包的测试,需要看到 SQL query,目前建议采用 MySQL 5.7 版本或在 MySQL 8.0 上 skip-ssl 关闭加密通信。

社区近期动态

 点一下“阅读原文”了解更多资讯

mysql8创建用户并授权_新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接相关推荐

  1. cryptojs支持rsa加密_新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接

    作者:秦福朗 爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查.热爱 IT,喜欢在互联网里畅游,擅长摄影.厨艺,不会厨艺的 DBA 不是好司机,didi~ 本文来源:原创投稿 *爱可生 ...

  2. mysql8创建用户并授权_新版mysql8.0.12添加用户并设置权限避免踩坑!

    新版MySQL8.0.12中,添加用户并设定权限 MySQL8.0之前在添加用户的时候可以直接设置用户权限如: GRANT ALL ON *.* TO `zqj`@`ip` IDENTIFIED BY ...

  3. mysql8导入 psc 没有数据_新特性解读 | MySQL 8.0.22 任意格式数据导入

    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年.擅长 MySQL.PostgreSQL.MongoDB 等开源数据库相关的备份恢复.SQL 调优.监控运维.高可用架构设计等.目前任职于爱可生, ...

  4. c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

    原创作者:杨涛涛 我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引. MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉. 比如对于以下的查询,无法发挥索引 ...

  5. 中累计直方图_新特性解读 | MySQL 8.0 直方图

    原创作者:杨涛涛 MySQL 8.0 推出了histogram,也叫柱状图或者直方图.先来解释下什么叫直方图. 关于直方图 我们知道,在DB中,优化器负责将SQL转换为很多个不同的执行计划,完了从中选 ...

  6. mysql 创建用户并授权_教你MySQL-8.0.x数据库授权

    Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码: [root@host]# mysqladmin -u root password "new_p ...

  7. mysql8.0 的新特性_What's New In MySQL 8.0(MySQL 8.0 新特性)

    由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gcc耗时较 ...

  8. mysql 8函数索引_新特性解读 | MySQL 8.0 索引特性1-函数索引

    原创作者:杨涛涛 函数索引顾名思义就是加给字段加了函数的索引,这里的函数也可以是表达式.所以也叫表达式索引. MySQL 5.7 推出了虚拟列的功能,MySQL8.0的函数索引内部其实也是依据虚拟列来 ...

  9. mysql force index报错_新特性解读 | MySQL 8.0 索引特性4-不可见索引

    MySQL 8.0 实现了索引的隐藏属性.当然这个特性很多商业数据库早就有了,比如ORACLE,在11g中就实现了.我来介绍下这个小特性. 介绍 INVISIBLE INDEX,不可见索引或者叫隐藏索 ...

最新文章

  1. python语言的单行注释以井号开头_推荐|零基础学习Python基础知识
  2. 微服务架构核心20讲
  3. CERT.RSA中证书的格式
  4. hdu2489 Minimal Ratio Tree
  5. 数组操作的两个常见小问题
  6. 成都Uber优步司机奖励政策(3月9日)
  7. linux配置文件、日志文件全备份
  8. azkaban 与 java任务_azkaban任务报错java.lang.RuntimeException: The root scratch dir: /tmp/hive...
  9. hydra mysql 爆破_Hydra(爆破神器)使用方法
  10. (map)出现最多的数
  11. CloudIDE插件开发实战:教你如何调试代码
  12. Python使用tkinter打造自定义对话框完整代码
  13. 计算机安全覆盖的内容有哪些,计算机网络的分类有哪些
  14. javascript 内存和连等赋值
  15. rk3568 4g 模块调试-ec20(移远模块)
  16. 如何快速自学生物信息学
  17. vs2019python使用教程_vs2019安装和使用详细图文教程
  18. 国产化DM达梦数据库 - 用户状态查询、锁定与解锁,“登录失败次数超过限制”问题解决
  19. iphonex蓝牙打不开转圈_苹果6 plus蓝牙打不开总转圈怎么处理?
  20. neo4j windows 3.5详细安装教程(附百度云链接)

热门文章

  1. Business Intelligence——SSIS项目从创建到部署的简单总结(二)
  2. 验证码何时可以退出历史舞台?
  3. Linux下安装zookeeper集群(奇数个)
  4. 4.4.6 数组也能无锁:AtomicIntegerArray
  5. Linux下nginx安装与配置
  6. 如何用distinct消除重复记录的同时又能选取多个字段值?
  7. vue从入门到精通之进阶篇(三)axios
  8. python --- udp的使用
  9. 第一篇-Html标签中head标签,body标签中input系列,textarea和select标签
  10. ImportError: No module named 'chardet'