mysql8创建用户并授权_新特性解读 | 从 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

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 解析抓包

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

此处提供一个小技巧:

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

aa63f1d4556dbdaf61f1dd49925184f6.png二、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 解析抓包

f2144bea8296e69486c1e81f53e64041.png

从上图可以分析以下信息:c59176db48b865619dbb121c688f3c7f.png

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

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

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

4ef440342482ce20c7be7d66092368bf.png

分步解析:

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

8745a05f57f6dc877cd0142ef857d58f.png

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

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

bb769d8836fed4d097e9a85caccf949b.png

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

包 11:

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

3f13677bd710f3bd3057428bd256a517.png

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

9a84654013b7cfb00806d0da195556c1.png

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

2147062360a268fbfbfadece96064ca3.png

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

7e7345d618fc40237829f2b3ab2b4d2a.png

包 13:

Certificate:客户端证书。

0db624745ee4b1ebf74539e17d07cdf9.png

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

8b1fb34505cfb8cf4b9604d68eecd7e3.png

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

ec40592d941a3c3adcd44d1b115c6e8a.png

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

53f296cf5ad180e04930156998d655e9.png

包 14:

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

4420b7b3ec5cf92d113d22f7584b871f.png

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

13e87bb9a1d5ae25ea5857cf612fcb75.png

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

3682df19ca1f8569546cf1b7d3a83da3.png

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

社区近期动态

519fe216650a1a213f39877692d40bda.png

87f07a16d837d66f9d56cda7a6f34cd1.gif 点一下“阅读原文”了解更多资讯

e7e157bf0888837ff765db9b44fd17bc.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ACM进阶

ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:l C/C两种语言l 高等数学l 线性代数l 数据结构l 离散数学l 数据库原理l 操作系统原理l 计算机组成原理l 人工智能l 编译原理l 算法设计与分析除此…

[转 TDD] 如何坚持TDD:使用者出现的问题以及解决方案

原文地址:http://www.infoq.com/cn/articles/levison-TDD-adoption-strategy 转载于:https://www.cnblogs.com/cly84920/archive/2010/03/24/4426820.html

DP备份任务失败原因解析

以JDC为例,DP的备份任务失败troubleshooting流程为:1)/etc/opt/omni/server/datalist下都是备份的job code。如果要查看一个job code,可以more 此文件夹下的某个datalist,输入如下:最上面的两个脚本pre和post&#xff…

mysql求表中年龄同张三,mysql子查询与连接查询

表结构以及数据:CREATE TABLEstudent (idint(11) NOT NULLAUTO_INCREMENT,namevarchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,ageint(11) NULL DEFAULT NULL,PRIMARY KEY(id) USING BTREE) ENGINE InnoDB AUTO_INCREMENT 13 CHARACT…

jenkins war包_Jenkins的安装和部署(jenkins教程)

一、jenkins的下载、安装以及环境的搭建部署。1.什么是jenkins以及它的作用:Jenkins 是一个可扩展的持续集成(CI)平台。它只是一个平台,真正运作的都是插件。Jenkins的主要作用:持续的监控软件版本发布/测试项目。监控…

.net Web网站转换成Web应用程序 备忘

1.新建Web应用程序,把Web网站代码全部粘贴进来2.添加所有原来引用3.【*】Web应用程序不再自动预编译App_Code文件夹,但是会编译任何文件夹下的类文件(除App_Code),所有给App_Code文件夹换个其它名字。4.【*】把第3部改名后文件夹下的所有文件&#xff0c…

div没有设置高度,背景颜色却无法显示

在设计网页时,设置了div为自动高度或不给height值,当div设置背景时在IE6可以显示背景颜色,但是IE7,8却不显示。 解决办法如下: 1、把height:auto;改成height:100%; overflow:hidden; 原理:IE6可以再不给高度的情况下自…

内存恶鬼drawRect

转载于:http://bihongbo.com/内存恶鬼drawRect 标题有点吓人,但是对于drawRect的评价倒是一点都不过分。在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的程序内存暴增。下面我们来看一个例子。 去年的某天午后,北京的雾霾…

c#和python同一主机直接udp_为什么Python 如此之慢

原文:https://hackernoon.com/why-is-python-so-slow-e5074b6fe55b​hackernoon.comPython 正在爆炸般流行起来,它被用于DevOps, 数据处理,web开发和安全领域。但是在速度方面却没有取得过什么胜利。 Java在速度方面和C/C/C#/Python比起来如何&#xff…

matlab编程ode45,matlab 中ode45的源代码如何看懂

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求常微分方程的数值解 ode45方法的源代码怎么看懂呢?四百多行 如何理解这些代码的核心思想 以方便未来自己使用呢?求大神指点迷津 感激不尽function varargout ode45(ode,tspan,y0,options,varargin)%ODE45…

N2 API

非常详细的N2API文档,以及N2的Wiki和讨论区,特此贴出,以备参考。 参考:http://consultingblogs.emc.com/jamesbroome/archive/2009/04/24/why-i-like-n2-cms.aspx 转载于:https://www.cnblogs.com/chenjunsheep/archive/2010/03/25/1695300.…

C#第零篇

看看荒废的园子和无所作为的自己。真是坑了身边一大帮人。 C、C、C#都是知道语法,自己从来不敢认真地去编一下程啊。真是惭愧。不过现在觉得C#比较简单,就从这里从头开始。伤心啊。 现在没什么时间,大概一天可以有2个小时时间来学习。其它时间…

lldb 调试php,linux系统下如何在vscode中调试C++代码

本篇博客以一个简单的hello world程序,介绍在vscode中调试C代码的配置过程。1. 安装编译器vscode是一个轻量的代码编辑器,并不具备代码编译功能,代码编译需要交给编译器完成。linux下最常用的编译器是gcc,通过如下命令安装&#x…

MyBatis之八:需要说明的几个java api的生命周期以及封装

学习mybatis不得不了解SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession。这里主要是讲解它们的生命周期以及一般最佳实践。 一般来说对象的生命周期也就是对象创建到销毁的过程,如果在这个过程中,如果实现的代码质量不佳,那么很容易…

.Net如何统计在线人数

统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率现在,我们就介绍一个简单明了的方法来统计在线用户的多…

EFI BIOS下的磁盘管理工具Diskpart,Efifmt与Efichk(转)

Diskpart.efi GPT分区格式工具下载: EfiDiskUtility v1.3(X64).rarhttp://pan.baidu.com/share/link?shareid174670&uk3204866771 EFI BIOS作为一种创新的BIOS架构,自然有其独特之初,今天我给大家一下运行在EFI Shell环境下几款由Microsoft开发的磁盘管理工具.…

php负责传递数据,php传递数据的方法有哪些

php传递数据的方法有哪些发布时间:2021-03-19 09:10:54来源:亿速云阅读:58作者:小新这篇文章将为大家详细讲解有关php传递数据的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅…

ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解

sudo apt-get install rdesktoprdesktop 124.42.120.174:1433 呵呵,连接成功了。 -f 全屏-a 16位色默认端口是3389(linux 22 sh)注意:windows 的服务中的 Terminal Servies 需要开启。我的电脑 右键 属性 远程中,勾选 …

那一瞬...

那一日,那一月,那一年,那一世... 仓央嘉措 那一日 我闭目在经殿的香雾中 蓦然听见你诵经的真言 那一月 我摇动所有的经筒,不为超度 只为触摸你的指尖 那一年 磕长头匍匐在山路,不为觐见 只为贴着你的温暖 那…

除了工作怎么交朋友_夫妻感情不好怎么办?夫妻关系紧张该如何解决?

夫妻感情不好怎么办?夫妻关系紧张该如何解决?1. 象征两人的兴趣随着年龄的增长而多样化。年轻的时候往往因为他们之间的差异而互相吸引,但当他们在中老年则需要更多的安慰或关心,理解,需求就不同了。当你发现自己的志向迥然不同时…