本文来自网易云社区

之前有介绍《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. IO流输入输出流,字符字节流

    一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...

  2. FBKVOController代码阅读

    功能:对kvo机制进行封装,简化使用,简化内存管理: 要素:观察者.被观察者.处理函数. 模式:注册表模式: 机制:对象创建.注册管理.内存管理.处理机制转换: 其它:注册去重: kvo的管理机制:

  3. PHP 获取数组随意下标key的上一个prev和下一个next下标值

    PHP 获取数组随意下标key的上一个prev和下一个next下标值 <? php $xoops[1] = '小'; $xoops[2] = '孩'; $xoops[3] = '子'; $xoo ...

  4. HDOJ 1528 Card Game Cheater

    版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss https://blog.csdn.net/u012797220/article/details/3 ...

  5. 10、SpringBoot-CRUD登陆拦截

    1.前端页面的设置 index.html <input type="text" class="form-control" name="usern ...

  6. ThreadPoolExecutor异常处理

    java.util.concurrent包中的ThreadPoolExecutor,提供了java语言的线程池,你可以提交一个返回结果的任务(submit(Callable),返回Future),或者 ...

  7. mac终端terminal快捷键

    mac终端terminal快捷键: Command + K 清屏 Command + T 新建标签 Command +W  关闭当前标签页 Command + S  保存终端输出 Command + ...

  8. spring加载属性(properties)文件

    一.注解方式加载 jdbc.driver=org.mariadb.jdbc.Driver jdbc.url=jdbc:mariadb://localhost:3306/kt jdbc.user=roo ...

  9. java之sleep(),join(),yield(),wait(),notify()、notifyAll()区别

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  10. 缓存反向代理-Varnish

    简介 Varnish是一款高性能.开源的缓存反向代理服务器.它从客户端接受请求,并尝试从缓存中响应请求,如果无法从缓存中提供响应,Varnish 向后端服务器发起请求,获取响应,将响应存储在缓存中,然 ...