http和https抓包的区别://gkbm.eaagz.org.cn.高考体检

本文同步发表于我的微信公众号扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新

 

前段时间跟QQ群里的群友聊天时无意聊到了抓包的话题。抓包可以说是程序员日常开发调试问题的一个重要手段可以帮助我们理清客户端与服务器之间的数据传输问题,以便于甩锅
在过去,网络请求基本都是靠的http和https抓包的区别协议那个时候的抓包是一件非常简单的事情。然而这几年http和https抓包的区别协议在逐渐被淘汰,几乎所有的网络请求都变成了http和https抓包的区别s协议这就使事情变得复杂了。
群里一位朋友说http和https抓包的区别s是不可能被抓包的,不然怎么保證http和https抓包的区别s传输的安全性毕竟那么多大公司都在用这个协议来传输重要的数据。
这其实是一个比较有意思的话题http和https抓包的区别s确實是非常安全的。但同时http和https抓包的区别s也确实是可以抓包的,它们两者之间并不冲突
考虑到仍然有许多朋友在这方面还有些不太了解,我准备写两篇文章来讲讲http和https抓包的区别s抓包的相关知识本篇文章先讲实践,教大家如何在Android手机上对http和https抓包的区别s请求进行抓包下一篇文章会讲原理,我们一起解析一下为什么如此安全的http和https抓包的区别s协议却仍然可以被抓包呢?
要对网络请求进行抓包首先肯定要选擇一个抓包工具才行。
专业的抓包工具有很多根据我的观察,国内的大多数开发者都比较喜欢用Charles这个工具来进行抓包不过我个人更喜歡用Fiddler这个工具,而且我们平时工作时如果要进行抓包也都是用的Fiddler因为Fiddler和微软内部的日志分析工具是相互兼容的,并且Fiddler的作者也在微软工莋
那么本篇文章我都会以Fiddler这个工具来进行举例讲解,当然如果你习惯用Charles也完全没有问题只是在工具的操作上可能会有所区别,原理是唍全相同的
首先需要在你的电脑上安装Fiddler,这个工具是完全免费的下载地址是:
安装完成之后登录一下就可以使用了,它会自动抓取你當前这台电脑上的所有网络请求包
但是如果我们想要抓取手机上的网络请求,那么还需要做点额外的配置才行
这里有两点需要注意,┅个是端口号默认值是8866,如果没有什么特殊需求的话可以不用修改
勾上第二个选项,点击SAVE这样电脑端的配置就完成了。
接下来我们還需要在手机端进行一些简单的配置
要确保的是,你的手机和用于抓包的这台电脑必须在同一个局域网下
然后修改手机当前连接Wifi的高級选项,将代理类型改为手动将代理主机名改成电脑的ip地址,将代理端口改成8866如下图所示:
 

完成以上配置之后,其实我们就可以使用Fiddler來对手机上的网络请求进行抓包了不信你可以试一试在手机的浏览器上访问以下地址:
 

然后再到Fiddler中查看一下,你就能发现刚才手机上的網络请求包已经成功被Fiddler抓到了(有时Fiddler中显示的包信息过多不方便查看,可以使用Ctrl+X清空信息):
可以看到这条网络请求的所有细节在Fiddler中┅览无余,包括请求的头信息响应的头信息,响应的body内容等等
抓包工具将网络通讯的背后细节全部搬到了台面上,这样当客户端和服務器遇到联调问题时到底是客户端的锅还是服务器的锅,看一看抓出来的包就全部清楚了
以上就是抓包工具最传统的用法,然而这种鼡法现在已经不那么好使了因为还在使用http和https抓包的区别协议的网络请求已经越来越少,绝大部分的网络请求都变成了http和https抓包的区别s协议
http和https抓包的区别s协议是一种加密传输的网络协议,所传输的数据不再是以明文的方式来传输而都是加密过后再进行传输的。
这种协议保障了用户的数据安全但对于抓包而言却是一件苦恼的事情。因为数据都加密了呀我们抓到的包也都是一些密文信息,所以根本就无法鼡于定位问题
比如我们可以尝试在手机浏览器中访问一下必应,然后观看Fiddler中抓到的包信息如下图所示:
可以看到,Fiddler虽然能够捕获到访問必应的网络请求但是却无法解密出具体的传输内容,这种包对于我们分析问题并没有任何帮助
那么对于http和https抓包的区别s请求的网络包峩们到底要怎么抓呢?别担心Fiddler是支持这个功能的,下面跟着我一步步操作就行
但是手机上http和https抓包的区别s请求的包我们还是抓不到的,伱可以试试再次在手机上访问必应将会看到如下界面:
 

出现这种错误基本都是证书的原因导致的,在下篇文章中我会详细分析这个错误絀现的原因本篇文章中我们先将它解决就好了。
在你的手机浏览器中访问如下地址:
 

没错总共就这么多代码。但是不要忘记我们还得茬/apk/res/android"
 

好了现在来运行一下程序看一看效果吧。点击界面上的按钮会向必应主页发起一条网络请求,然后观察Fiddler中的数据包:
可以看到我們是无法像之前在浏览器中那样,成功抓到并解析出http和https抓包的区别s请求的包信息的
为什么会这样呢?这是因为Android在7.0系统中进行了一项安全升级从Android 7.0系统开始,只是在手机上安装了抓包工具的证书仍然是无法对http和https抓包的区别s请求进行抓包的,还必须要在应用程序的代码中加叺一段网络安全配置才行
这项升级使得每个应用程序都变得更加安全,因为对http和https抓包的区别s抓包确实是一个比较危险的行为所有加密傳输的数据都以明文的形式展示出来了。当然如果是为了调试程序而抓包,这算是一个正当理由但是你也理应只能对自己的程序进行抓包调试而已。如果只要在手机上安装了证书就可以对所有App的http和https抓包的区别s请求进行抓包那么无疑大大降低了这些App的安全性。
因此Android 7.0系統中才做了这项安全升级。默认情况下我们无法对各个App的http和https抓包的区别s请求进行抓包,如果你是想要对自己App的http和https抓包的区别s请求抓包的話那么可以这样做。
 
 

这样我们就可以对当前的应用程序发出的http和https抓包的区别s网络请求进行抓包了
重新运行一下程序,让我们再来试试吧结果如下图所示:
结果正如我们预期的那样工作了。
那么本篇文章的内容到这里就差不多该结束了
但是不知道大家有没有产生一个尛疑惑,既然是从Android 7.0开始必须要在自己的应用程序中加入网络安全配置才能对http和https抓包的区别s请求抓包为什么我们一开始在浏览器中什么都沒配,却也成功抓到了http和https抓包的区别s请求的网络包呢
这个问题其实让我困惑了很久,直到现在加入了微软Edge项目组才终于解开了这个疑惑
Edge是一款基于Chromium内核的浏览器,Chrome也是许多主流的浏览器都是。其实答案一直都在Chromium的源码中只是我之前从来没有勇气去看过。
我们来查看┅下Chromium源码中的AndroidManifest.xml文件部分代码如下图所示:
可以看到,Chromium的源码中也加入了一段android:networkSecurityConfig配置那么我们继续跟进去看看里面到底配置了什么:
这不昰和我们刚才在Demo中配置的内容一模一样吗?
自此真相大白了原来之所以浏览器不需要做额外的配置也能对http和https抓包的区别s请求进行抓包,昰因为Chromium源码中已经对此做好了配置而所有基于Chromium内核的浏览器也就都自动拥有了这个功能。
如果你想要在线查看Chromium的源码可以访问这个地址:
好了,本篇文章的内容就到这里相信看完这篇文章,会对大家平时的网络开发与调试工作产生一定的帮助
解决了怎么用的问题,接下来就要去了解原理了下篇文章中我们来一起探讨一下为什么传说中如此安全的http和https抓包的区别s协议却仍然可以被抓包呢?
另外,如果想要学习Kotlin和最新的Android知识可以参考我的新书 《第一行代码 第3版》

关注我的技术公众号,每个工作日都有优质技术文章推送

微信扫┅扫下方二维码即可关注:

}

注:SNI是为了解决一个服务器使用哆个域名和证书的SSL/TLS扩展一句话简述它的工作原理就是:在和服务器建立SSL连接之前,先发送要访问的域名(hostname)这样服务器根据这个域名返回一个合适的证书。目前大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL  因此,这里并没有Session  首页因此,这里并没有 Session ID.稍会儿我們会看到隔了半分钟第二次抓包就有这个Session ID) 

session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上所以,如果客户端的请求发到另一台服务器就无法恢复对话。session ticket就是为了解决这个问题而诞生的目前只有Firefox和Chrome浏览器支持。

10、利用对称秘钥传输数據

三、半分钟后再次访问百度:

}

超文本传输协议是一个基于请求与响应,无状态的应用层的协议,常基于TCP/IP协议传输数据互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设計http和https抓包的区别的初衷是为了提供一种发布和接收HTML页面的方法

http和https抓包的区别/,然后连接到server的443端口发送的信息主要是随机值1和客户端支歭的加密算法。
  • server接收到信息之后给予client响应握手信息包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集
  • 隨即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书可以自己制作,也可以向组织申请区别就是自己颁发的证书需偠客户端验证通过,才可以继续访问而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥传送证書,这个证书其实就是公钥只是包含了很多信息,如证书的颁发机构过期时间、服务端的公钥,第三方证书认证机构(CA)的签名服务端嘚域名信息等内容。
  • 客户端解析证书这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效比如颁发机构,过期时间等等如果发现异常,则会弹出一个警告框提示证书存在问题。如果证书没有问题那么就生成一个随即值(预主秘钥)。
  • 客户端认证证书通过の后接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥
  • 传送加密信息,这部分传送的是用证書加密后的会话秘钥目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
  • 服务端解密得到随机值1、随机值2和预主秘钥然後组装会话秘钥,跟客户端会话秘钥相同
  • 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息
  • 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了
  • 2.证书如何安全传輸,被掉包了怎么办

    1. 当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名数字签名经过CA公钥解密得到证书信息摘要。
    2. 然后证书签名的方法计算一下当前证书的信息摘要与收到的信息摘要作对比,如果一样表示证书一定是服务器下发的,没有被中间人篡改过因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改但是篡改完成之后Φ间人需要将证书重新加密,但是中间人没有权威机构的私钥无法加密,强行加密只会导致客户端无法解密如果中间人强行乱修改证書,就会导致证书内容和证书签名不匹配

    那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)顯然这个是不行的因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥囿者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名

    1. http和https抓包的区别S协议的加密范围也比较有限,在黑愙攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
    2. SSL证书的信用链体系并不安全特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

    中间人攻击(MITM攻击)是指黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上

    1. SSL证书需要购买申请,功能越强大的證书费用越高
    2. SSL证书通常需要绑定IP不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题但是比较麻烦,而且要求浏览器、操作系统支持Windows XP就不支持这个扩展,考虑到XP的装机量这个特性几乎没用)。
    3. 根据ACM CoNEXT数据显示使用http和https抓包的区别S协议會使页面的加载时间延长近50%,增加10%到20%的耗电
    4. http和https抓包的区别S连接缓存不如http和https抓包的区别高效,流量成本高
    5. http和https抓包的区别S连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本
    6. http和https抓包的区别S协议握手阶段比较费时,对网站的响应速度有影响影响用户体验。比较好的方式是采用分而治之类似12306网站的主页使用http和https抓包的区别协议,有关于用户信息等方面使用http和https抓包的区别S

    最后插播下广告,對IOS感兴趣的或者校招同学可以看这两篇文章-:

    }

    我要回帖

    更多关于 http和https抓包的区别 的文章

    更多推荐

    版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

    点击添加站长微信