zoukankan      html  css  js  c++  java
  • Charles抓包https

    Charles抓包https

    2018.05.08 10:46 字数 762 阅读 7800评论 3

    抓取HTTPS请求包,对数据进行排查检验

    1.安装Charles
    2.电脑安装Charles证书

    电脑安装证书
    双击还是信任下吧

    3.手机安装证书

    手机安装证书


    4.手机网页输入网址 下载证书并信任

    手机证书下载网址
    安装到手机上

    注意:在iOS 10.3之前,当你将安装一个自定义证书,iOS会默认信任,不需要进一步的设置。而iOS 10.3之后,安装新的自定义证书默认是不受信任的。如果要信任已安装的自定义证书,需要手动打开开关以信任证书。

    iOS11下需要手动信任已下载好的证书,方法如下:

    设置->通用->关于本机->证书信任设置-> 找到charles proxy custom root certificate然后信任该证书即可.


    iOS11下手动信任证书

    5.开始抓包
    Charles设置Proxy
    Proxy -> SSL Proxying Settings...,如下图所示:

    疑问1,如果设置成特定的域名发现还是抓不了包,不知道为什么

    选择Proxy | Recording Settings,弹出Recording Settings设置选项卡,勾选include

    只展示你想看见的域名结果

    6.原理简析
    如果是HTTP请求,因为数据本身并没加密所以请求内容和返回结果是直接展现出来的。
    但HTTPS是对数据进行了加密处理的,如果不做任何应对是无法获取其中内容。所以Charles做的就是对客户端把自己伪装成服务器,对服务器把自己伪装成客户端:

    1. Charles拦截客户端的请求,伪装成客户端向服务器进行请求
    2. 服务器向“客户端”(实际上是Charles)返回服务器的CA证书
    3. Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
    4. 客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
    5. Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
    6. 服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
    7. Charles拦截服务器的响应,替换成自己的证书后发送给客户端

    当然,如果用户不选择信任安装Charles的CA证书,Charles也无法获取请求内容。还有一种,如果客户端内置了本身的CA证书,这时如果Charles把自己的证书发送给客户端,客户端会发现与程序内的证书不一致,不予通过,此时Charles也是无法获取信息的。

    参考
    mac环境下使用Charles抓包Https请求
    浅谈Charles抓包
    Charles 抓包IOS中https乱码解决

  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/ldq2016/p/9802906.html
Copyright © 2011-2022 走看看