charles 为什么能抓https的包?原理是什么

众所周知,http明文传输,https加密就是为了在传输层禁止暴露明文,但是为什么抓包工具又能抓到? 岂不是和https的设计矛盾了??

简单的说就是中间人攻击,也就是“man-in-the-middle attack”

先来看一下charles的document:

“Charles can be used as a man-in-the-middle HTTPS proxy, enabling you to view in plain text the communication between web browser and SSL web server.

Charles does this by becoming a man-in-the-middle. Instead of your browser seeing the server’s certificate, Charles dynamically generates a certificate for the server and signs it with its own root certificate (the Charles CA Certificate). Charles receives the server’s certificate, while your browser receives Charles’s certificate. Therefore you will see a security warning, indicating that the root authority is not trusted. If you add the Charles CA Certificate to your trusted certificates you will no longer see any warnings – see below for how to do this.”

先说一下https使用的非对称加密的原理。等等说非对称加密之前还要说下对称加密的原理。简单来说,对称加密就是加密解密使用同一个密钥。浏览器和服务器交互的话一般会动态生成一个密钥,所以密钥如何交换就成了问题。

下面引入非对称密钥,非对称加密主要用于密钥交换(也叫密钥协商),能够很好地解决这个问题。浏览器和服务器每次新建会话时都使用非对称密钥交换算法协商出对称密钥,使用这些对称密钥完成应用数据的加解密和验证,整个会话过程中的密钥只在内存中生成和保存,而且每个会话的对称密钥都不相同(除非会话复用),中间者无法窃取。

密钥交换过程:服务器的公钥是公开的,私钥是不公开的。浏览器先向服务器取得公钥,然后用公钥加密自己的私钥连同自己私钥加密的请求一并发送给服务器。服务器使用自己私钥解密得到浏览器的私钥,使用浏览器的私钥解密请求。然后再用浏览器的私钥加密response发送回浏览器(此处之前笔误写成服务器了)。

中间人攻击是先伪装服务器向浏览器发送伪造的公钥,从而取得浏览器的私钥。这样就完成的浏览器端的解密。服务器端类似。

但是!!!https是可以防止中间人攻击的,因为服务器的公钥是用证书的。charles伪造的证书一般浏览器会警告,所以我们需要将charles的证书认为可靠的。从而实现中间人。

关于iOS 9的无法使用Charles抓包的问题。

SSL Proxying with iOS 9

You need to disable App Transport Security in your app to use Charles SSL Proxying with apps running on iOS 9.

To disable ATS you need to add keys to your app's Info.plist file, as below. See thistech note from Apple for more information.

You must remember to re-enable ATS before you release your app to take advantage of the security that ATS provides.

NSAppTransportSecurity

NSAllowsArbitraryLoads

Note that this means that you cannot use Charles to observe SSL traffic from apps that you do not control.

ref: FAQs • Charles Web Debugging Proxy

About ATS:Cocoa Keys

简单地说,iOS的ATS是一种对安全的加强。在About ATS里面我们可以看到ATS对证书的一些限制。现在无法使用Charles,则是因为iOS 9 认为这个连接不安全,目前的解决方案是禁用ATS。长远来看,要么Charles的证书能够是ATS眼中的『安全证书』,要么ATS自己修改spec将Charles的证书认为是安全的,但是这两种方法目前看来可能还需要一段时候。

ok,over。

如满意求转载注明出处。

charles抓包

如何使用Charles抓包并分析Http报文

从Web安全的攻击防御方面来说,最多接触的应该就是Http协议了,当我们作为中间人(man-in-the-middle)查看到所有浏览器到web服务器的http报文的时候,一切就都有意思起来。

比如,分析某电商在交易支付的时候请求了哪些东西,分析某网站的登录流程都请求了哪些数据,分析某社交软件有没有偷偷的上传隐私数据等等,甚至可以拿到Https加密过的请求哦!

如果我是黑客,分析过后也许就会通过工具篡改伪造请求报文,欺骗服务器,从而实现某些恶意行为,比如撞库、刷单、撸羊毛、恶意爬虫爬取数据等等。

那么,如何快速有效的抓取http数据包并进行分析呢,这里推荐一个跨平台抓包神器—Charles。

charles是一个图形界面可视化的代理形式(HTTP,SOCKS,SSL/HTTPS)的抓包工具,它提供对HTTP,SSL/HTTPS协议下通过同一个路由器下的设备的数据交流分析,包括各种HTTP请求和响应信息,charles目前只支持抓到部分socket的数据。pc端 步骤

3、打开charles,再来打开你想抓的网站,用charles来抓取一些数据(例如:img图片、js文件、css文件和其他)

4、只要双击overview上的url那一行,就能弹出一个写满全地址的框,把地址放进浏览器打开,就能获取到json数据

注意:如果网站(还是移动端)的数据加密,就抓取不到了,还有一点,因为是没用钱买charles,所以charles只能用几分钟就得重新打开

移动端 步骤

5、先在电脑上下载一个免费的wifi,把电脑和手机都连在同一个人局域网上

6、打开charles,点击工具栏上的 proxy ---> proxy settings ----> 勾选上 enable transparent http proxying --->点击ok

注意:不要勾选 use a dynamic port,否则端口会随时在变,端口8888是默认

7、点击 proxy ---> access proxying settings --> 点击add ---> 再来打开cmd ---> 输入 ipconfig 命令,找到本机的ipv4地址(通常以19开头,只要在cmd界面输入ipconfig回车找到ipv4就行了) ---> ok

8、设置手机,打开连接手机与电脑上的同一网络的wifi,代理 设置为 手动 ,主机名设置 有charles打开的电脑的ipv4的地址,端口默认为8888,点击确认 就可以了

总结:这只是本人使用charles过程的步骤,希望能对你有帮助。