新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]作者:秦福朗 爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱 IT,喜欢在互联网里畅游,擅长摄影、厨艺,不会厨艺的 DBA 不是好司机,didi~ 本文来源:原创投稿 *爱可…

新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接

作者:秦福朗 爱可生 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

代码100分

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

代码100分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 看 MySQL 8.0 加密连接[亲测有效]

从上图可以分析以下信息: 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

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

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

新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

二、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

代码100分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 解析抓包

新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

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

新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

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

首先,这里为什么是 TLS 而不是 SSL?

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

MySQL 支持多种 TLS 版本协议,此次测试使用 8.0 的 client 为 TLSv1.2。

从 wireshark 中看一下 TLS 握手的步骤: 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

分步解析:

**包 8:**从客户端到服务端进行 ClientHello,进行问候通信,来启动整个握手环节 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

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

**包 10:**服务器返回的 ServerHello。进行问候返回 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

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

包 11:

**Certificate:**服务器想客户端发送 x.509 证书列表对客户端身份进行验证,证书内包含公钥。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Server Key Exchange:**服务器密钥交换,这里发送服务器使用的 DH 参数。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Certificate Request:**客户证书申请,此处是服务器希望对客户端进行身份验证发送的信息,包含了所需要的证书类型。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Server Hello Done:**服务器打招呼结束,等待客户端返回信息。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

包 13:

**Certificate:**客户端证书. 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Client Key Exchange:**客户端密钥交换。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

此处包含:服务器验证客户端协议版本与原始的 client hello 的消息是否匹配,由客户端生成使用服务端公钥加密的随机数 Pre-master secret 以进行服务器对客户端的身份验证。

**Change Cipher Spec:**客户端通知服务器,所有未来的消息都使用刚刚协商的算法与密钥进行加密传输。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Encrypted Handshake Message:**完成 TLS 消息加密,此处数据已使用刚刚协商的密钥与算法进行了加密。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

包 14:

**New Session Ticket:**新的会话标签,记录了加密参数。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Change Cipher Spec:**服务器通知客户机,将使用现有的算法和密钥对信息进行加密。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

**Encrypted Handshake Message:**完成 TLS 消息加密,客户端成功解密并验证了信息,服务器就成功通过了身份验证。 新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接[亲测有效]

到此 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 关闭加密通信。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8967.html

(0)
上一篇 2023-02-18
下一篇 2023-02-18

相关推荐

  • Python Object类型介绍

    Python Object类型介绍Python是一门面向对象的语言,这就意味着在Python中,万物皆对象。对象是Python的核心,也是Python所特有的。因此,了解Python Object类型是学习Python的重要前置知识之一。

    2024-07-28
    35
  • 数据采集介绍_数据收集的五种方法

    数据采集介绍_数据收集的五种方法1. 概述 现在学校越来越重视孩子课外知识的掌握,给孩子挑选课外书一般都是参考学校或者家长之间的推荐。 有时,也会想看看在儿童阶段,目前到底流行的是些什么样的书。 ​ 于是,就简单写了这个小爬虫,采集

    2023-04-30
    149
  • Python 偏函数

    Python 偏函数函数是Python中重要的概念之一,它为我们提供了封装代码的能力,增加了代码的可读性和复用性。Python中的函数还有一个非常强大的功能就是偏函数。

    2024-07-23
    34
  • 学习如何在Python中使用正则表达式

    学习如何在Python中使用正则表达式正则表达式是一个强大的工具,可以帮助你在Python中搜索、匹配、替换和分割字符串。

    2024-05-16
    71
  • 在JavaScript中查找指定字符

    在JavaScript中查找指定字符在前端开发中,我们经常需要在字符串中查找指定字符,来进行字符串处理,比如数据的格式化和校验等。JavaScript提供了多种方法来查找指定字符,本文将会详细介绍这些方法。

    2024-04-15
    70
  • sql server中的数据类型转换cast与convert

    sql server中的数据类型转换cast与convertCAST 和 CONVERT 都可以将某种数据类型的表达式显式转换为另一种数据类型。 CAST: CAST ( expression AS data_type ) CONVERT: CONVERT …

    2023-01-30
    165
  • 使用Python进行MongoDB计数操作

    使用Python进行MongoDB计数操作MongoDB是一个非关系型数据库(NoSQL),它支持非常灵活的文档模型,很容易进行水平扩展。作为一种流行的数据库,它提供了非常便捷的Python API,可以使开发人员在Python中轻松访问和管理MongoDB数据。在本文中,我们将介绍如何使用Python通过MongoDB进行计数操作。

    2024-05-17
    83
  • Python 3中map函数的用法

    Python 3中map函数的用法map()函数是Python内置的高阶函数,它接收一个函数和一个可迭代对象作为参数,根据函数对可迭代对象中的每一个元素进行处理,最终返回一个新的可迭代对象。

    2024-06-15
    45

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注