Charles 抓包原理[通俗易懂]

Charles 抓包原理[通俗易懂]tTransferProtocolSecure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。所以,研究HTTPS协议原理,最终就是研究SSL/TLS协议。运行过程我们都知道HTTPS在保证数据安全传输上使用了加密算法,但是具体是如何加…

大家好,又见面了,我是你们的朋友全栈君。

t Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。所以,研究HTTPS协议原理,最终就是研究SSL/TLS协议。

运行过程

我们都知道HTTPS在保证数据安全传输上使用了加密算法,但是具体是如何加密的,或许许多人和我一样也是云里雾里。
实际上SSL/TLS协议的基本思路是非对称加密和对称加密结合来传输数据,一言以弊之,HTTPS是通过一次非对称加密算法(如RSA算法)进行了协商密钥的生成与交换,然后在后续通信过程中就使用协商密钥进行对称加密通信,之所以要使用这两种加密方式的原因在于非对称加密计算量较大,如果一直使用非对称加密来传输数据的话,会影响效率。

Charles 原理

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://javaforall.net/140006.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月28日 下午9:16
下一篇 2022年5月28日 下午9:36


相关推荐

  • html邮件签名制作,制作自己的个性化电子邮件签名[通俗易懂]

    html邮件签名制作,制作自己的个性化电子邮件签名[通俗易懂]制作自己的个性化电子邮件签名您是不是经常给朋友发E-mail?如果每个邮件中都有一个精美的签名文件,文件中包括通讯地址、邮政编码以及电话、手机、QQ号码等联系方法,甚至可以包含简单的声音文件,并且每次在OutlookExpress中新建邮件时,可以自动签名——岂不很美?我们就一起来制作这样一个签名文件。1、启动OE,单击工具栏“新邮件”按钮,打开“新邮件”窗口。输入签名内容,包括通讯地址、电话…

    2022年10月9日
    6
  • java购物商城_基于javaweb实现的简单购物商城[通俗易懂]

    java购物商城_基于javaweb实现的简单购物商城[通俗易懂]【实例简介】基于javaweb的购物商城,简单,适合新手练手,导入项目即可运行【实例截图】【核心代码】shop(1)└──shop├──rcm│├──src││├──META-INF│││└──MANIFEST.MF││└──rcm││├──dao│││├──DataBaseUtils.j…

    2022年7月8日
    21
  • 飞机订票系统测试用例

    飞机订票系统测试用例1、登录界面的标题为“航班预订登录界面”;2、代理名称由4位或者以上的字母和数字组成,不超过8位,不能由纯数字组成或者数字开头,否则系统提示给出相应的提示“代理名称不能由纯数字组成,请重新输入”或“代理名称不能由数字开头,请重新输入”。代理名称长度小于4位时,点击确认按钮,系统弹出提示对话框提示“代理名称长度必须至少为4个字符,请重新输入”;代理名称长度大于8位时,点击确认按钮,系统弹出提

    2022年6月17日
    63
  • 不同网段实现全网互通的方式_同一网段无法互通

    不同网段实现全网互通的方式_同一网段无法互通实现不同网段vlan互访【实验拓扑】【实验过程】一.二层设备依据拓扑创建vlan,实现同vlan互访。1.sw1创建vlan100、vlan200.2.将接口加入相应的vlan。验证:二、实现跨交换机相同vlan互访。1.sw1、sw2开启trunk,并允许vlan通过。创建vlan100、vlan200,并将接口加入对应的vlan。验证是否跨交换机相同vlan可以互访。三、配置单臂路由。实现不同vlan可以互访。1.配置子接口,充当vlan100

    2025年11月1日
    4
  • numpy中randn_flattening

    numpy中randn_flatteningNumpy中的ravel()和flatten()两个函数可以对多维数据进行扁平化操作。flatten()返回的是一个数组的的副本,新的对象;ravel()返回的是一个数组的非副本视图。

    2022年8月5日
    10
  • 万亿级消息队列的演进:如何在Kafka/Pulsar架构下实现Exactly-Once投递与零丢失?

    万亿级消息队列的演进:如何在Kafka/Pulsar架构下实现Exactly-Once投递与零丢失?

    2026年3月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号