如何使用charles 抓包使用方法对Android Https进行抓包

Charles的HTTPS抓包方法及原理分析 - 简书
Charles的HTTPS抓包方法及原理分析
作为移动平台的RD,项目开发过程中一项比较重要的甩锅技能——抓包应该大家都比较熟悉了,毕竟有些bug可能是由服务端下发的数据出错导致的。虽然抓包工具很好用,但是如果不做一些设置的话,对于HTTPS协议的请求就无能为力了,比如这样
这对于一些注重安全性的应用来说,或许就不是特别好使,我们的项目目前也在逐渐从HTTP转向HTTPS,因此掌握这些技巧还是比较有用的。抓包工具多种多样,比较好使的还是Charles和Fiddler,下面就简单的介绍下HTTPS的相关原理并以Charles为例来介绍下如何抓取HTTPS协议的包。
其实使用工具抓HTTPS的包本身并不难,两三步简单的操作就可以实现,关键如果不理解原理的话,总觉得不舒服斯基,所以把原理分析放在前面。
HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。所以,研究HTTPS协议原理,最终就是研究SSL/TLS协议。
我们都知道HTTPS在保证数据安全传输上使用了加密算法,但是具体是如何加密的,或许许多人和我一样也是云里雾里。实际上SSL/TLS协议的基本思路是非对称加密和对称加密结合来传输数据,一言以弊之,HTTPS是通过一次非对称加密算法(如RSA算法)进行了协商密钥的生成与交换,然后在后续通信过程中就使用协商密钥进行对称加密通信,之所以要使用这两种加密方式的原因在于非对称加密计算量较大,如果一直使用非对称加密来传输数据的话,会影响效率。运行过程盗用巨人的图,可以表示如下
有了图就可以一步一步分析了
1.HTTPS请求
这个步骤是整个通信过程中的第一步,首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,在这一步中,客户端主要向服务器提供以下信息:
支持的协议版本,比如TLS 1.0版
一个客户端生成的随机数RandomC,稍后用于生成“协商密钥”。
支持的加密方法,比如RSA公钥加密。
支持的压缩方法。
2.服务器响应
服务器收到客户端请求后,向客户端发出回应,服务器的回应一般包含以下内容:
确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
一个服务器生成的随机数RandomS,稍后用于生成“协商密钥”*。
从客户端支持的加密方法中选择一个作为确认要使用的加密方法,比如RSA公钥加密。
服务器证书。这个服务器证书就是表明服务器身份的东西,其中也包含了非对称加密中需要使用的公钥。
3.证书校验、生成密码、公钥加密
客户端收到服务器回应以后,首先验证服务器返回的证书。如果证书不是可信机构颁发,或者证书中的域名与实际域名不一致,或者证书已经过期,以浏览器为例客户端会向网页访问者显示一个警告,由其选择是否还要继续通信。 如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后生成密码、公钥加密。生成密码的过程会先产生一个随机数Pre-master key,该随机数是整个握手阶段出现的第三个随机数,稍后会经过公钥加密发送到服务端,有了它以后,客户端和服务器就同时有了三个随机数——RandomC,RandomS,Pre-master key,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把“协商密钥”。
4.加密信息C-S
加密信息是指上面一步生成的内容,主要包括
一个随机数Pre-master key。用于给服务端生成“协商密钥”。
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
客户端握手结束通知,表示客户端的握手阶段已经结束。这一项通常也是前面发送的所有内容的hash值,用来供服务器校验。
5.私钥解密、解密握手消息、验证Hash
服务器收到客户端公钥加密的第三个随机数Pre-master key之后,通过自身私钥解密该数值并由之前的RandomC和RandomS计算生成本次会话所用的“会话密钥”。然后,通过约定的Hash算法验证客户端发送的数据完整性。
6.加密信息S-C
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发生的所有内容的hash值,用来供客户端校验。
7.解密握手消息、验证Hash
客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。
8.正常加密通信
握手成功之后,所有的通信数据将由之前协商密钥及约定好的算法进行加密解密。
Charles抓HTTPS包原理
Charles本身是一个协议代理工具,如果只是普通的HTTP请求,因为数据本身没经过再次加密,因此作为代理可以知道所有客户端发送到服务端的请求内容以及服务端返回给客户端的数据内容,这也就是抓包工具能够将数据传输内容直接展现出来的原因。对于HTTPS请求,4,6,8步骤的数据都已经经过了加密,代理如果什么都不做的话是无法获取到其中的内容的。为了实现这个过程的数据获取,Charles需要做的事情是对客户端伪装服务端,对服务端伪装客户端,具体
截获真实客户端的HTTPS请求,伪装客户端向真实服务端发送HTTPS请求
接受真实服务器响应,用Charles自己的证书伪装服务端向真实客户端发送数据内容
一般情况下HTTPS中是客户端对服务端做证书校验,当然也有一些金融机构会有用户证书作为提供给服务端做用户认证的工具,保证发出请求的的确是这部分授权用户。我们仅分析客户端对服务单做证书校验的这种。Android有自己的一套HTTPS通信调用方式,以HttpsURLConnection为例
上面这段代码就是一个https请求的样例,这种方法的特点是证书校验工作交由系统处理,系统只会允许可信CA签发的数字证书能够访问,私有CA签发的数字证书(比如12306以及我们上文说的Charles证书)是无法访问的。那么如何绕过呢,
第一种方法是修改Https通信代码,这种只对开发者开发应用的时候好使,我们需要实现X509TrustManager接口去做自己的一套证书校验,它并不通用,尤其是对于我们抓包而言是不可行的,因为我们没法去修改别人应用中的代码。
第二种方法是将私有CA签发的数字证书安装到手机中并且作为受信任证书保存,这种方式是我们推荐的方式,唯一的缺点是你的手机上可能会在通知栏一直留着一个特殊标志,告诉你网络可能被监控。恩,不监控我们怎么抓包呢,哈哈。
Charles抓包步骤
原理都说完了,下面就是贴图时间,我们要做的最重要的其实只有一件事情,就是
将私有CA签发的数字证书安装到手机中并且作为受信任证书保存
一步一步来
首先打开Charles菜单,选择安装Charles证书到移动设备
Charles提示你如何安装,这里如何用手机连接Charles就不做叙述了,普通的HTTP抓包都需要执行
手机上打开
device--111551.png
选择Proxy-SSL Proxying Settings,设置启用SSL代理能力,并自行Add需要抓取的服务地址
Paste_Image.png在res目录下新建一个xml文件夹,之后在res/xml/路径下新建文件network_security_config.xml
res/xml/network_security_config.xml:
你要抓取的域名
在res目录下新建一个raw文件夹,将手机上安装的证书文件放入res/raw/目录下,证书格式:pem,ca等(chales的话就是将你在手机打开/getssl下载的证书放入即可),步骤2中的证书文件名,就是你放入res/raw/目录下文件的名字
配置完重新运行项目,就可以看到报文了!以上就是Charles Android 抓包失败SSLHandshake: Received fatal alert: certificate_unknown的全文介绍,希望对您学习和使用Android开发有所帮助.
这些内容可能对你也有帮助
更多可查看Android开发列表页。
猜您也会喜欢这些文章手机抓包软件Charles安装使用实例 - ThinkPHP框架
因为项目要用到,于是折腾了下,现在把自己做的笔记发出来,有兴趣的可以看看,避免大家走弯路
更多技术文章请访问:
Charles上的设置
要截取iPhone上的网络请求,我们首先需要将Charles的代理功能打开。在Charles的菜单栏上选择“Proxy”-&“Proxy Settings”,填入代理端口8888,并且勾上”Enable transparent HTTP proxying” 就完成了在Charles上的设置。如下图所示:
iPhone上的设置
首先我们需要获取Charles运行所在电脑的IP地址,打开Terminal,输入ifconfig en0, 即可获得该电脑的IP,如下图所示:
在iPhone的 “设置”-&“无线局域网“中,可以看到当前连接的wifi名,通过点击右边的详情键,可以看到当前连接上的wifi的详细信息,包括IP地址,子网掩码等信息。在其最底部有“HTTP代理”一项,我们将其切换成手动,然后填上Charles运行所在的电脑的IP,以及端口号8888,如下图所示:
设置好之后,我们打开iPhone上的任意需要网络通讯的程序,就可以看到Charles弹出iPhone请求连接的确认菜单(如下图所示),点击“Allow”即可完成设置。
切换视图显示
enter image description here
上图中的7个位置是最常用的几个功能。
1 那个垃圾桶图标,功能是clear,清理掉所有请求显示信息。
2 那个望远镜图标,功能是搜索关键字,也可以使用ctrl+f实现,可以设置搜索的范围。
3 圆圈中间红点的图标,功能是领抓去的数据显示或者不显示的设置。 这个本人认为是charles工具很方便的一个两点,一般都使其为不显示抓去状态,只有当自己测试的时候的前后,在令其为抓取并显示状态。这样可以快准狠的获取到相关自己想要的信息,而不必在一堆数据请求中去寻找。
4 编辑修改功能,可以编辑修改任意请求信息,修改完毕后点击Execute就可以发送一个修改后的请求数据包。
5 抓取的数据包的请求地址的url信息显示。
6 抓取的数据包的请求内容的信息显示。
post请求可以显示form形式,直观明了。
7 返回数据内容信息的显示。
其中5、6、7中都有各种形式的数据显示形式,其中raw是原始数据包的状态。
解决中文乱码
Response中文乱码:在Info.plist 中 的vmoption 添加-Dfile.encoding=UTF-8
info.plist路径 程序-&Charles.app-&显示包内容-&Info.plist
zhangya4548
积分:4257
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。1.首先安装Charles软件,在我上传的资源中有破解版()
另外还要注意,Charles软件运行需要java环境,自行百度安装,这里就不说了
2.安装完成运行软件,对软件进行相关配置,注意本文是针对https的抓包,所以先安装证书,(手机电脑都需要)
先安装点脑的在Charles菜单栏选中Help中的
配置相关ssl选项
选择Proxy | Proxy Settings,弹出proxy设置选项卡,勾选Enabling transparent HTTP proxying
勾选Enable SSL Proxying,在Location部份选择add,按如下图添加,要抓取网站、443端口的数据()一定要填
写全,否则不同的二级域名是不能解密的
3.安装手机证书
链接:/assets/legacy-ssl/charles.crt
&&在Safari中单开上面的链接,根据提示安装证书
4.手机设置代理
查看电脑IP地址,在手机无线里设置代理即可
本文已收录于以下专栏:
相关文章推荐
移动开发经常都需要抓包调试,之前用的是Window的fiddler,某日才发现mac上的Charles也有Windows版本,一查原来是mac/linux/Windows都支持,好定西啊,我是比较喜欢...
学习android到一定阶段时,需要我们开始进行项目实战,这需要我们获取服务端的数据,通过抓取已经发布的应用访问的地址,我们可以对该应用进行仿制,以提高自己的技术水平目前有HTTP和HTTPS两种链接...
charles官网下载
在电脑里安装好charles后,要进行一系列的配置,步骤如下:
1、proxy→proxy setting...→设置如图
2、下载charles证书   help→s...
最近使用Charles抓包,在网上搜教程,很多教程都不完整,弄了好久才弄好连接手机抓包功能,这次自己整理一下,分享出来,也便于以后自己使用,下面开始吧。
1、     安装Charles
破解安装...
安装环境:Windows 7
安装步骤:1.下载jdk,配置环境变量
    2.下载charles
抓包分析数据在移动开发中十分重要,可以帮助我们更快的了解数据构成,提高开发效率。但是在苹果要求上线的App必须使用HTTS之后,HTTPS数据包的抓取分析较为麻烦,在此总结了在mac上使用Charle...
写在前面https抓包的实现
(一)首先,电脑得装个证书(二)然后,移动设备上安装证书(三)最后,Charles添加SSL Proxying
开发时,面对各...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 charles android 抓包 的文章

 

随机推荐