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

对称非对称加密,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.lqws.cn/news/581221.html

相关文章:

  • 非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上
  • GeoTools 结合 OpenLayers 实现属性查询(二)
  • Python UI自动化演进格局:从传统库到AI驱动的智能代理
  • (4)pytest-fixture
  • 04_MySQL 通过 Docker 在同一个服务器上搭建主从集群(一主一从)
  • MetaGPT: 多智能体框架(还没装好...)
  • 大数据系统架构实践(三):Hbase集群部署
  • 机器学习06 集成学习
  • R1-Searcher使用强化学习增强语言模型解决问题的搜索能力
  • 手机屏暗点缺陷修复及相关液晶线路激光修复原理
  • 超大js文件多层级引用缓存在网络较差的时候无法调用使用问题
  • 设计模式-单例模式
  • FPGA矩阵算法实现
  • PHP安装使用教程
  • 如何在Linux服务器中配置Oracle数据库
  • 大数据(4)-spark
  • vue3 + luckysheet 实现在线编辑Excel
  • stm32 freertos下基于 hal库的模拟I2C驱动实现
  • Python 安装使用教程
  • 【知识】RPC和gRPC
  • 实现ModbusTCP转Profinet网关协议转换功能的网关设备
  • Install Ubuntu 24.04 System
  • reactor-test
  • 如何在 iOS 上线前做好安全防护?IPA 混淆与逆向防护实践详解
  • 什么是IOC(控制反转)?—— 用生活实例解读Spring核心概念
  • 【硬核数学】2.7 理论与现实的鸿沟:深度学习的数值稳定性挑战《从零构建机器学习、深度学习到LLM的数学认知》
  • 使用OpenSSL接口读取pem编码格式文件中的证书
  • Java外观模式实现方式与测试方法
  • 链表题解——设计链表【LeetCode】
  • 大模型-分布式推理简介