文章目录
-
- MySQL客户端与服务端建立连接流程抓包分析
-
- 1.连接建立流程
- 2.各类数据包介绍
-
- 2.1挑战数据包
- 2.2认证数据包
- 2.3切换认证插件请求数据包
- 2.4切换认证插件响应数据包
- 2.5成功数据包
- 2.6失败数据包
- 3.注意点
- 4.测试代码
MySQL客户端与服务端建立连接流程抓包分析
抓包工具采用的是Wireshark,mysql客户端使用的是java操作jdbc连接mysql。
1.连接建立流程
- 服务端向客户端发送挑战数据包
- 客户端向服务端发送认证数据包
- 如果认证失败,则需要切换认证插件(更换加密算法),服务端会返回切换认证插件的请求数据包,客户端会重新加密密码,发送切换认证插件的响应数据包
- 服务端返回成功或失败数据包
2.各类数据包介绍
2.1挑战数据包
mysql采用的是挑战-响应方式来进行身份认证。由服务端生成加密用的盐给客户端,提高安全性
数据包携带的信息如下:
名称 | 类型 | 长度 | 描述 |
---|---|---|---|
Protocol | int | 1个字节 | 协议的版本号 |
Version | string | 不确定 | mysql的版本 |
Thread ID | int | 4个字节 | 建立连接所分配的id |
Salt | string | 20个字节 8+12 | 挑战字符串,相当于用于加密密码的盐,分为两部分,长度分别为8字节和12字节 |
Server Capabilities | int | 2个字节 | 服务器支持的功能,int为32位,1支持,0不支持,最多支持32种功能。这里占2个字节,为int的前16位 |
Server Language | int | 1个字节 | 服务器编码,通常为utf8mb4 |
Server Status | int | 2个字节 | 服务器状态,通常为SERVER_STATUS_AUTOCOMMIT,表示自动提交事务 |
Extended Server Capabilities | int | 2个字节 | 服务器支持的拓展功能,int为32位,1支持,0不支持,最多支持32种功能。这里占2个字节,为int的后16位 |
Authentication Plugin Length | int | 1个字节 | ?好像指的是挑战字符串的长度,没搞懂为什么是21而不是20 |
Unused | 10个字节 | 未使用的部分 | |