当前位置: 首页 > backend >正文

对称非对称加密,https和http,https通讯原理,Charles抓包原理

文章目录

  • 对称加密的非对称加密
  • http和https原理
  • TCP三次握手四次挥手
  • https通讯流程:
  • Charles抓包原理

对称加密的非对称加密

对称加密:发送方的接收方式使用同一个秘钥进行加密和解密,发送方将需要发送的数据,选择某种加密算法,加上秘钥,加密之后传输给接收方,接收方接收到数据使用秘钥和相同的加密算法进行解密,获得数据信息。对称加密的优点是加密速度快,但是,接收方和发送方拥有同样的秘钥,容易泄露,安全得不到保证,且秘钥传递的过程中也容易泄露。

非对称加密:发送方生成一对秘钥,公钥和私钥,公钥可以交给别人,用来加密,私钥用来解密,自己保留,传输过程中即使公钥和传输的数据别截获了,没有私钥也解密不了。

http和https原理

http是什么:http是一种基于请求响应的应用层协议,设计的初衷是为了简单高效的传输超文本数据,所以不涉及任何的数据加密,身份校验和完整性验证,安全性较差。

https是什么:https在http的基础上使用对称加密和非对称加密保证的数据传输的安全性,在握手阶段使用非对称加密传输秘钥,建立连接之后使用秘钥进行对称加密,保证数据的安全,https对数据进行加密,身份的校验还有数据的额完整性,保证数据的安全。

TCP三次握手四次挥手

TCP三次握手:目的是为了在不可靠的网络中建立可靠的连接,并协商初始序号

  • 第一步,客户端服务端发送SYN请求请求建立连接
  • 第二步,SYN收到之后发送SYN+ACK报文,表明同意建立连接
  • 第三步,客户端收到消息之后发送ACK再次确认
  • 之后就可以发送消息

在这里插入图片描述

为什么不能两次握手,要三次握手?这个是为了防止失效的连接请求再次发送到了服务端,服务端同意连接之后,客户端拒绝了,但是服务端认为建立了连接,等待消息的接收,造成资源浪费。

TCP四次挥手:目的是为了确保算法数据传输完毕,优雅释放连接

  • 第一步,客户端发送fin表示不再发送数据,告诉服务端我数据传输结束
  • 第二步,服务端接收到数据,发送ACK确认,表明收到服务端的请求,但是我可能还有一些数据需要发送给你,你还要接收
  • 第三步,服务端发送完数据之后,发送fin报文,表明我的数据也发送完了,可以关闭了
  • 第四步,客户端回复ACK确认收到信息,关闭连接

在这里插入图片描述

为什么不能两次挥手:由于客户端请求关闭连接,自己没有数据需要发送,但由于http是全双工的两边都是可以发送数据,服务器的数据可能还没有发送完成,这个时候客户端还需要接收数据不能关闭连接

为什么不能三次挥手:三次挥手是可以的,不过得满足特定条件,当客户端发送关闭连接,这个时候服务端已经也没有数据需要发送了,就可以进行关闭

第四步能不能不要了:不能,第四步是为了确保客户端已经收到了服务端的fin信息,服务端收到之后才会关闭连接,如果没有收到信息,服务端会进行超时重传,再次发送fin给客户端,在2msl时间里,客户端收到信息之后回再次发送ACK

https通讯流程:

TCP三次握手

  1. 目的:建立可靠的数据传输
  2. 过程:
    • 客户端 → 发送SYN包 → 服务器
    • 服务器 → 回复SYN+ACK包 → 客户端
    • 客户端 → 发送ACK包 → 服务器

TLS握手

  1. 目的:保证数据的安全性,协商秘钥和验证服务器证书
  2. 过程:
    • 客户端发起握手,发送信息(支持的TSL版本,支持的加密套件,客户端生成的随机数)
    • 服务器响应,发送信息(确定的TSL版本,选定的加密套件,服务器生成的随机数,服务器的CA证书)
    • 客户端验证服务器的证书
    • 交换密钥,客户端生成预主密钥,使用服务器的公钥加密,发送到服务器,服务器解密获取预主密钥
    • 生成会话密钥,服务器和客户端都使用两个随机数和这个预主密钥生成会话密钥

数据传输

  1. 目的:使用协商的对称密钥加密实际通信数据
  2. 过程:
    • 客户端和服务端使用秘钥对数据加密之后再发送

TCP四次挥手

  1. 目的:安全关闭TCP连接,释放资源
  2. 过程:
    • 客户端 → 发送FIN包 → 服务器。
    • 服务器 → 回复ACK包 → 客户端。
    • 服务器 → 发送FIN包 → 客户端。
    • 客户端 → 回复ACK包 → 服务器。

Charles抓包原理

作为一个代理服务器,拦截客户端和服务器之间的通讯,做响应的处理之后再发送到对应的地址

  • 客户端向服务发送证书请求
  • Charles拦截请求,伪装客户端向服务器发送请求
  • 服务器返回CA证书
  • Charles获取证书的公钥,自己制作证书,返回自己证书给客户端
  • 客户端检查证书,生成秘钥,使用Charles公钥加密,发送给服务器
  • Charles拦截,使用自己的私钥解密,使用服务端的公钥加密,发送给服务器
  • 服务器用自己的私钥解密,想客户端发送响应
  • Charles拦截,自己给客户端响应
  • 连接建立

在这里插入图片描述

http://www.xdnf.cn/news/14782.html

相关文章:

  • 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
  • JavaEE初阶第五期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(三)
  • Windows环境下Docker容器化的安装与设置指南
  • 时序数据库IoTDB监控指标采集与可视化指南
  • 基于MATLAB的SVM支持向量机的乳腺癌分类方法应用
  • 现代 JavaScript (ES6+) 入门到实战(六):异步的终极形态 - async/await 的优雅魔法
  • HTTP中常见的Content-Type
  • HybridCLR热更新实例项目及改造流程
  • 现代 JavaScript (ES6+) 入门到实战(五):告别回调地狱,Promise 完全入门
  • 免费SSL证书一键申请与自动续期
  • STM32——HAL库总结
  • 【AGI】Qwen VLo:多模态AI的范式重构与AGI演进关键里程碑
  • mac触摸板设置右键
  • 【HuggingFace】模型下载至本地访问
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(三)- 职位数据统计分析
  • 条件概率:不确定性决策的基石
  • C#写破解rar文件密码例程
  • 【硬核数学】10. “价值标尺”-损失函数:信息论如何设计深度学习的损失函数《从零构建机器学习、深度学习到LLM的数学认知》
  • Android大图加载优化:BitmapRegionDecoder深度解析与实战
  • IDE/IoT/实践小熊派LiteOS工程配置、编译、烧录、调试(基于 bearpi-iot_std_liteos 源码)
  • 马斯克的 Neuralink:当意念突破肉体的边界,未来已来
  • 同步日志系统深度解析【链式调用】【宏定义】【固定缓冲区】【线程局部存储】【RAII】
  • 《汇编语言:基于X86处理器》第5章 过程(2)
  • C# 委托(为委托添加方法和从委托移除方法)
  • 暑假复习篇之类与对象
  • gantt-task-react的改造使用
  • 源码运行效果图(六)
  • cocos creator 3.8 - 精品源码 - 六边形消消乐(六边形叠叠乐、六边形堆叠战士)
  • 《自动控制原理 》- 第 1 章 自动控制的基本原理与方式
  • 计算机操作系统(十七)内存管理