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

相信只要是从事软件开发, 多多少少都会涉及到数据包的抓取。常见的有网页数据抓取(即网页爬虫),应用程序数据包抓取等。网页数据抓取比较简单, 在chrome下可以非常方便的分析网页结构和数据请求;而应用程序数据包的抓取则相对复杂些, 通常需要配置代理软件。常用的代理软件有parosmitmproxyhoneyproxy等。若是你的路由器支持, 你甚至可以直接在电脑上使用wireshark捕捉其他ip的数据包。

paros 是一种轻量型的数据包抓取软件, 自带代理服务器, 配置非常简单。 其配置方法可以参考使用Paros监控iPhone发出的HTTP请求。paros 是用java编写的, 跨平台, 支持windows, mac, linux。

mitmproxy 是python编写的数据包抓取软件, 使用控制台作为操作界面。提供libmproxy工具包。

honeyproxy 基于 mitmproxy, 提供比较友好的交互界面。

通常,简单的未加密的http数据包是非常容易抓取的, 只要简单的配置下paros就可以了。 因为, http未加密, 所有的数据都是明文传输的, 配置代理后, 代理可以直接读取到这些通信数据包。

然而, https 则不行, 即便是通过代理进行数据传输, 流过代理的数据也是经过ssl加密的, 代理当然没有办法解密通信数据包。

首先来普及下https的知识。

Https 通信时序

https 对应的通信时序图如下:

  1. 服务器在接受到客户端发起https连接请求后, 将返回该网站的证书(根证书信息等)
  2. 客户端将校验网站证书的合法性。
  3. 验证通过后,客户端产生随机的对称密钥。
  4. 客户端使用网站证书的公钥加密对称密钥, 并发送给服务器端。
  5. 服务器端收到对称密钥后, 就可以进行利用对称密钥的密文通信了。

每一个https的网站都会向证书颁发机构(CA)申请一个网站证书, 这个证书实际是非对称加密的公钥密钥对, 利用非对称加密算法的特殊性, 可以在理论上避免第三方窃听。

非对称加密算法的原理

  • 假设有A, B 两方, 双方都有一对密钥(公钥和私钥)。公钥是对外开放的, 任何人都可以得到;私钥是自己的, 别人是获取不到的。公钥和私钥是相对应的, 利用公钥进行加密, 只能用私钥解密, 使用公钥无法解密; 利用私钥解密, 则只能用公钥解密, 使用私钥也无法解密。

  • 利用A的公钥对数据进行加密, 则只有A的私钥可以解密, 任何第三方都不可以解密数据。 这样可以在不安全的通道上进行数据传输, 保证只有A可以解密数据, 任何第三方只能窃听到已加密的数据, 即便拥有公钥也无法进行解密操作。

  • 利用A的私钥对约定好的数据加密, 发送给B。 B可以使用公钥进行解密, 从而验证A的身份。任何第三方都无法模拟这样加密后的数据。这种形式广泛用于电子签名等。

对非对称加密算法不了解的同学, 可以参考百度百科.

Https加密通信原理

Https 加密通信利用非对称加密算法对称算法, 使用非对称加密算法验证身份和发送对称密钥, 使用对称算法加密通信数据。

证书实际就是非对称加密算法的公钥私钥, 分为两大类, 根证书网站证书

  • 根证书属于证书颁发结构, 根证书的公钥默认内嵌在我们的系统中。运行命令win+r 运行 certmgr.msc 可以查看在系统中的根证书列表。
  • 网站证书 带有根证书的私钥签名, 在https握手开始阶段由网站服务器发送给客户端。 客户端收到网站证书后, 立即校验证书的有效性。校验方法是: 取根证书的私钥签名, 利用客户端系统内嵌的根证书公钥解密。 解密成功, 则证书有效。

聊到这里, 我们可以看出若想伪造网站证书进行https代理, 必须导入自己的根证书到系统中, 才能使客户端认为伪造的网站证书是有效的。
伟大的goagent 就是用这种原理实现的, 因此从严格的角度上来说, goagent是不安全的, 有被窃听的危险。不过, 屌丝怕啥, 随便窃...

所以, 有人说没办法抓取https 的数据包, 这是不正确的。 经过一些配置还是可以抓取https 数据包的。可惜我跟个傻帽似的还跟honeyproxy 的作者探讨怎么加入https的支持, 羞愧死了。

mitmproxy实际上是支持抓取https数据包的。在官方文档里面, 甚至将Firefox, OSX, Windows7, iOS, Android 怎么配置根证书都说的一清二楚。Android的配置地址是http://mitmproxy.org/doc/certinstall/android.html。 可惜我在我的手机Galaxy Nexus( 4.2 Stock ROM)上测试没成功。

Android 2.X 与 Android 4.1 以及Android 4.2 的根证书配置方式都不同。 若是有同学搞定这个问题, 分享下心得哈.

HTTPS数据包抓取的可行性分析的更多相关文章

  1. 6 wireshark 安装使用 数据包抓取

    1.wireshark安装 2.开始使用 3.界面详情 4. 数据包抓取 5.过滤数据

  2. linux-网络数据包抓取-tcpdump

    用法格式: tcpdump [-i 网卡]  [选项]  '表达式' 选项说明如下: -i:interface 监听的网卡. -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和 ...

  3. 测试必备工具之抓包神器 Charles 如何抓取 https 数据包?

    之前发过一篇文章讲解了Charles抓包工具的基本使用(有需要的小伙伴可以去看上一篇文章),  讲的数据包主要是http协议,大家可以看到数据包并直接显示具体详细的内容: 但是如果抓到的是https的 ...

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

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

  5. burp抓取ios设备https数据包

    参考了网上其他相关教程,自己动手试了一次,有效的方法可确定为: 1.让PC机和移动端处于同一局域网, 2.burp设定监听所有接口,并监听一个端口 3.手机端设置代理,方式为手动,ip地址填PC在局域 ...

  6. Fiddler抓取https数据包

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

  7. Burpsuite抓取https数据包

    Burpsuite抓取https包 浏览器代理设置 Burpsuite代理设置 启动Burpsuite,浏览器访问127.0.0.1:8080,点击CA Certificate,下载cacert.de ...

  8. Charles + Android 抓取Https数据包 (适用于Android 6.0及以下)

    通过Charles代理,我们能很轻易的抓取手机的Http请求,因为Http属于明文传输,所以我们能直接获取到我们要抓取的内容.但是Https内容本身就是加密的,这时我们会发现内容是加密的了.本文我们来 ...

  9. Burp Suite抓https数据包

    本地环境JDK1.8Burp Suite 1.7.26 Firefox 59.0.2 一.burp介绍请自行谷歌,这里不过多介绍 二.配置HTTPS抓包方法[以Firefox为例]通常情况下burp默 ...

随机推荐

  1. IDEA打war包部署本地TOMCAT测试

    在Eclipse中打war包很方便,导出即可直接选择war包,如下图所示: 但是在IDEA中有点麻烦,网上很多教程,做的也都很好,我自己也做一份,加深一下印象. 首先打开File->Projec ...

  2. 零基础入门学习Python(23)--递归:这帮小兔崽子

    知识点 我们都知道兔子繁殖能力是惊人的,如下图: 我们可以用数学函数来定义: 假设我们需要求出经历了20个月后,总共有多少对小兔崽子? 迭代实现 def fab(n): n1 = 1 n2 = 1 n ...

  3. ajax中文乱码解决(java)

    方法1: 页面端发出的数据做一次encodeURI,服务器端使用new String(old.getBytes("iso8859-1"), "utf-8") 方 ...

  4. sort 结构体 正数负数分开排序

    对于结构体排序的一点点记录,之前遇到过结构体排序,个人比较喜欢使用在结构体当中直接重载小于号的方法, 例如说: struct Node{ int index; int del; bool operat ...

  5. HDU 5458 Stability

    Stability Time Limit: 2000ms Memory Limit: 102400KB This problem will be judged on HDU. Original ID: ...

  6. C语言不容易识别的坑

    1.重复两次定义 #include<stdio.h> #include<stdlib.h> #include<string.h> int a,b; void fun ...

  7. HDU 4745 最长回文子序列

    题目大意 两只青蛙朝不同方向条,每次都到达值相同的位置,不能重复到达自己到过的地方,且不能飞跃已到过的地方 我们可以理解为这两只青蛙分别把整个序列遍历了一遍,依次走过所有的点,找到最多相同的点的个数, ...

  8. POJ 2456_Aggressive cows

    题意: 给定N个位置,把C头牛分别放入,求相邻两头牛的最大距离. 分析: 即为求两头牛之间最小距离的最大值.二分搜索答案. 代码: #include<iostream> #include& ...

  9. hdu5618(cdq分治求三维偏序)

    题意:给n(n<=100000)个点,坐标为(xi,yi,zi)(1<=xi,yi,zi<=100000),定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB, ...

  10. Model、ModelMap、ModelAndView的使用和区别

    1.Model的使用 数据传递:Model是通过addAttribute方法向页面传递数据的: 数据获取:JSP页面可以通过el表达式或C标签库的方法获取数据: return:return返回的是指定 ...