作者:秦福朗
爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱 IT,喜欢在互联网里畅游,擅长摄影、厨艺,不会厨艺的 DBA 不是好司机,didi~
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
引言社区之前的文章“快速掌握 MySQL 8.0 认证插件的使用”中说道,MySQL 8.0 使用 caching_sha2_password 认证插件进行加密连接,初步介绍了加密连接,本文从网络抓包层面看一下在使用 caching_sha2_password 插件的 MySQL 8.0 是如何进行加密连接的。一、MySQL 5.7 未加密连接的情况环境:本文目录:
引言 一、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 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 解析抓包


此处提供一个小技巧:
在 wireshark 里,编辑-首选项-Protocols-MySQL 里可以设置是否在解析窗口的 info 列里面显示 SQL query 语句以及可以设置 MySQL TCP 默认端口。

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-SHA2562.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,进行问候通信,来启动整个握手环节。包 10:服务器返回的 ServerHello。进行问候返回,
包 11:
Certificate:服务器向客户端发送 x.509 证书列表对客户端身份进行验证,证书内包含公钥。包 13:
Certificate:客户端证书。包 14:
New Session Ticket:新的会话标签,记录了加密参数。
社区近期动态

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