找回密码
 立即注册
注册 登录
×
热搜: 活动 交友 discuz
查看: 158|回复: 20

【技术流】Wireshark对HTTPS数据的解密

[复制链接]

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-23 09:35:34 | 显示全部楼层 |阅读模式
本文作者:李莉, 网易云平台测试组高级测试工程师。
之前有介绍《以TCP/IP协议为例,如何通过wireshark抓包分析?》,那如果是HTTPS协议,可以抓包分析吗?基于好奇,查阅了下相关资料分享给大家。
在讲解密之前先来看下HTTPS与HTTP的不同之处,HTTPS是在TCP/IP与HTTP之间,增加一个安全传输层协议,而这个安全传输层协议一般用SSL或TLS,类似于下图。即我们所说的HTTPS=HTTP+SSL/TLS。


SSL协议分为SSL记录协议层和SSL握手协议层。SSL握手协议建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL记录协议将数据块进行拆分压缩,计算消息验证码,加密,封装记录头然后进行传输。如下图显示,这里不展开,有兴趣的童鞋可以继续自行深入了解。


Wireshark在对HTTP请求分析时,一般是通过选定数据右键鼠标,查看Follow TCP Stream。


即可以看到请求的详细内容了。


Wireshark对HTTPS请求数据又是如何分析的呢,实际操作了下,以访问CSDN首页为例,可以看到抓取的数据包如下:


根据截图会发现2个略“神奇”的东东:
(1)虽然过滤条件设置了SSL,但过滤结果满屏都是TLS的身影,随机找了其他一些网站也都是用TLS。简单查阅了下资料,发现TLS是以建立在SSL V3.0的基础上,两者的加密算法和MAC算法都不一样,而协议本身差异性不大。TLS协议也是由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议。忽略协议的差异性,后面会拿TLS来解密。
(2)好多hello呀,Client Hello和Server Hello好多,这是什么呢?这是TLS的握手。整个握手阶段如下,可分为5步:
第1步,浏览器给出协议版本号、一个客户端生成的随机数,以及客户端支持的加密方法。
第2步,服务器确认双方使用的加密方法,使用的tls版本号和一个随机数。
第3步,并给出数字证书、以及一个服务器运行Diffie-Hellman算法生成的参数,比如pubkey。
第4步,浏览器获取服务器发来的pubkey,计算出另一个pubkey,发给服务器。
第5步,服务器发给浏览器一个session ticket。


具体握手过程也可以通过Wireshark的抓包一步步验证,这里不再详述,还是专心来看看如何使用Wireshark来数据解密。
我们现在获取到的Wireshark抓包数据在握手完成之后,还是各种TLSv1.2的东东,都是加密后的数据。


解密方式有好几种,介绍我觉得最简单的,通过浏览器保存的TLS 会话中使用的对称密钥来进行数据解密。在浏览器接收到数据之后,会使用秘钥对数据进行解密,部分浏览器会在某个地方会存储这个密钥,我们只要获取浏览器中的会话密钥就能解密数据。
以windows系统+Chrome浏览器为例,首先要导出浏览器存储的密钥,通过计算机属性——高级系统设置——环境变量,新建一个变量名“SSLKEYLOGFILE”的变量,变量值是导出的密钥具体文件地址。


设置后可以通过Chrome浏览器打开任意一个HTTPS网址,此时查看变量值对应路径,已经生成sslkey.log。


密钥成功导出到本地啦。现在可以将密钥应用到Wireshark了。具体路径如下:菜单栏Edit——Preferences——Protocols——SSL(注意,不论是SSL还是TLS这里都是SSL,没有单独的TLS选项),在(Pre)-Master-Secretlog filename中选择刚才设置的变量值。


配置完成,看下效果:


看到有HTTP了,之前都是TLSv1.2。同时,WireShark下面会有一个“Decrypted SSL data”即已解密的SSL Data的标签,点击之后你就可以如上图所示的看到已经解密的TLS数据包的相信信息了。
觉得这样太难看了?OK,也可以像HTTP一样,通过鼠标右键在菜单栏中选择“Follow SSL Stream”,查看完整的HTTPS解密之后的请求数据哦。




除此之外,上面还有很多TLSv1.2的东东,比如:client_key_exchange、Session Ticket,这是最初提到过的TLS握手过程的第四步和第五步,并不是请求数据包的内容,因此看到其中像是没有解密的内容也不要奇怪哦。


以上就是我的分享,如果小伙伴们有什么疑问,可以在评论区留言,也欢迎各位与我们分享自己的看法~
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-23 09:35:53 | 显示全部楼层
https单向加密,解密数据不存在技术问题
回复

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-9-23 09:36:49 | 显示全部楼层
只要有秘钥,怎么解密不了呢。文章本质chrome浏览器就是导出秘钥,然后wireshark读取秘钥并解密。至于加密算法都是明文,可直接读取。
回复

使用道具 举报

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-23 09:37:14 | 显示全部楼层
『https单向加密』,大佬你真的明白你在说什么吗?大佬不妨解释解释
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-23 09:37:35 | 显示全部楼层
那天大佬喝多了,滑稽笑
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-23 09:38:15 | 显示全部楼层
您好,我想解密不是本地的ssl包,请问该肿么办呀
回复

使用道具 举报

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-9-23 09:39:01 | 显示全部楼层
抓取iPhone的https请求岂不是没有办法?
回复

使用道具 举报

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-9-23 09:39:28 | 显示全部楼层
安装fiddler的根证书并且在iPhone上信任
回复

使用道具 举报

1

主题

4

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-23 09:39:48 | 显示全部楼层
同问,使用rvi方式抓取iphone的https连接,使用的是tlsv1.2,怎么查看http协议内容
回复

使用道具 举报

3

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-9-23 09:40:02 | 显示全部楼层
说了啊用fiddler抓包
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋| 黑客通

GMT+8, 2025-10-14 06:12 , Processed in 0.126023 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表