本文来自网易云社区

之前有介绍《wireshark抓包分析——TCP/IP协议》,然后某天有人问我,示例里是HTTP的,如果是HTTPS,你可以抓包分析吗?基于好奇,我查阅了下相关资料,把一些浅见分享给大家。在讲HTTPS的解密之前先来看下HTTPS与HTTP的不同之处,HTTPS是在TCP/IP与HTTP之间,增加一个安全传输层协议,而这个安全传输层协议一般用SSL或TLS,类似于下图。即HTTPS=HTTP+SSL/TLS。

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

应用层协议

SSL握手协议

SSL记录协议

TCP

IP

先回顾下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来解密分析。现在来看另外1个满屏满眼的东东。(2)好多hello呀,Client Hello和Server Hello好多,这是什么呢?这是TLS的握手。整个握手阶段如下,可分为5步。

第一步,浏览器给出协议版本号、一个客户端生成的随机数,以及客户端支持的加密方法。

第二步,服务器确认双方使用的加密方法,使用的tls版本号和一个随机数。

第三部,并给出数字证书、以及一个服务器运行Diffie-Hellman算法生成的参数,比如pubkey。

第四部,浏览器获取服务器发来的pubkey,计算出另一个pubkey,发给服务器。

第五部,服务器发给浏览器一个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-Secret log 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握手过程的第四步和第五步,并不是请求数据包的内容,因此看到其中像是没有解密的内容也不要奇怪哦。

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者李莉授权发布。

相关文章:
【推荐】 知物由学|见招拆招,Android应用破解及防护秘籍

Wireshark对HTTPS数据的解密的更多相关文章

  1. wireshark分析https数据包解密前后的特点

    wireshark分析https数据包解密前后的特点 (一)https解密前 1.协议种类:2种(1)TCP(第四层,传输层)(2)SSL/TLS(第五层,应用层,加解密)2.应用层数据所在数据包特点 ...

  2. 为什么Wireshark无法解密HTTPS数据

    为什么Wireshark无法解密HTTPS数据 导读 由于需要定位一个问题,在服务器上tcpdump抓取https数据包,然后下载到本地打开wireshark分析.然后我们下载域名私钥配置到wires ...

  3. GSM Hacking Part② :使用SDR捕获GSM网络数据并解密

    0×00 在文章第一部分 GSM Hacking Part① :使用SDR扫描嗅探GSM网络 搭建了嗅探GSM流量的环境,在第二部中,我们来讨论如何捕获发短信以及通话过程中的流量,从捕获到的数据中解密 ...

  4. Fiddler抓取https数据包

    Wireshark和Fiddler的优缺点: ①Wireshark是一种在网络层上工作的抓包工具,不仅自带大量的协议分析器,而且可以通过编写Wireshark插件来识别自定义的协议.虽然Wiresha ...

  5. [转]HTTPS网络流量解密方法探索系列(一)

    前言 分析网络流量总是绕不开HTTPS,因其广泛使用甚至是强制使用逐渐被大众熟知,在保证其安全的同时也提高了对流量进行研究的难度.目前解析HTTPS协议的文章很多,有很多不错的文章可以带着入门,老实说 ...

  6. HTTPS数据包抓取的可行性分析

    HTTPS数据包抓取的可行性分析 相信只要是从事软件开发, 多多少少都会涉及到数据包的抓取.常见的有网页数据抓取(即网页爬虫),应用程序数据包抓取等.网页数据抓取比较简单, 在chrome下可以非常方 ...

  7. (在客户端)https抓包解密

    (一)原理分析 https的数据包是用对称秘钥(https协议协商出来的随机数)加密后的密文. 对称秘钥在传输线路上是密文的(被非对称加密过),但是在client.server端是明文的(因为要用于加 ...

  8. Fiddler:在PC和移动设备上抓取HTTPS数据包

    Fiddler是一个免费的Web调试代理,支持任何浏览器.系统以及平台.这个工具是进行Web和App网络开发的必备工具,戳此处下载. 根据Fiddler官网的描述,具有以下六大特点: Web调试 性能 ...

  9. HTTPS-使用Fiddler抓取HTTPS数据包原理

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

随机推荐

  1. Javascript 中 Array的 sort()和 compare()方法

    Javascript 中 Array的 sort()方法其实是把要排序的内容转化为string(调用 toString()), 然后按照字符串的第一位 ascii 码先后顺序进行比较,不是数字. 我们 ...

  2. hbase添加大文件

    一直使用hbase作大容量存储,因为hbase易于存取. 今天,在录入数据的时候,突然报出一个KeyValue size too large.很是奇怪. 后来发现,该数据特别大,经查源码 privat ...

  3. MATLAB 中gcf、gca 以及gco 的区别

    MATLAB 中gcf.gca 以及gco 的区别gcf 返回当前Figure 对象的句柄值gca 返回当前axes 对象的句柄值gco 返回当前鼠标单击的句柄值,该对象可以是除root 对象外的任意 ...

  4. 使用Redis+java(模仿数据库)实现对象存取和读取

    实现前要引入Redis架包 maven项目 <dependency> <groupId>redis.clients</groupId> <artifactId ...

  5. 【洛谷P2340】 奶牛会展

    \(奶牛会展\) 题目链接 由于智商之和或情商之和不能为负数,所以直接把智商+情商>0的奶牛加上是布星的 我们考虑背包,不妨将智商当做物品大小,将情商当做价值 我们要求 大小+价值 的最大值 \ ...

  6. java Thread 类 run 和 start 方法区别

    public class ThreadModle { public static void main(String[] args) throws InterruptedException { Thre ...

  7. .NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态

    新建一个.NET Core控制台程序,输入如下代码: using System; using System.Threading; using System.Threading.Tasks; class ...

  8. div样式position:fixed,不随屏幕滚动而滚动,导致屏幕太小时弹出层被遮挡,无法滚动查看的解决办法

    window.onscroll = function () { var sl = -Math.max(document.body.scrollTop, document.documentElement ...

  9. Colored Boots题解

    题目来自Codeforce 1141Dhttp://codeforces.com/problemset/problem/1141/D 因为是全英文题面,就先简单的阐述一下题面. 首先输入一个数n,然后 ...

  10. 【C++ Primer】读书笔记_第一章

    Main(): 1. C++程序必须包含main()函数,操作系统通过调用main来运行C++程序. 2. main()的形参可以为空. 3. main函数的返回类型必须为int,返回给操作系统.in ...