当前位置: 首页 > 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.dtcms.com/a/262952.html

相关文章:

  • macos 使用 vllm 启动模型
  • WIFI 低功耗保活知识系列---三.WiFi AP如何广播自己的缓存区信息
  • OpenCV CUDA模块设备层----计算向量的平方根函数sqrt
  • 基于Spring Boot的绿园社区团购系统的设计与实现
  • Python 安装使用教程
  • Spring Boot 启动性能优化实战指南
  • 基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文
  • 【硬核数学】2.7 理论与现实的鸿沟:深度学习的数值稳定性挑战《从零构建机器学习、深度学习到LLM的数学认知》
  • 【Spring】——事务、整合、注解
  • 后台管理系统模板Art Design Pro
  • js代码03
  • Karmada 多集群服务发现
  • Apache Doris Profile 深度解析:从获取到分析,解锁查询性能优化密码
  • RedhatCentos挂载镜像
  • LeetCode Hot100(图论)
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 使用 Sqlcmd 高效导入大型 SQL Server 数据库脚本 (.sql)
  • 深入理解 B+ 树:数据库索引的脊梁
  • AI初学者如何对大模型进行微调?——零基础保姆级实战指南
  • vscode一个文件夹有残余的git仓库文件,已经失效了,怎样进行清空仓库残余文件并重新初始化git--ubuntu
  • 【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
  • 炸鸡派-基础测试例程
  • Linux入门篇学习——Ubuntu 系统介绍和Ubuntu启用root用户
  • 在线五子棋对战项目
  • 1.1_2 计算机网络的组成和功能
  • python+uniapp基于微信小程序的食堂菜品查询系统
  • Deepoc 大模型:无人机行业的智能变革引擎
  • vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)
  • SpringCloud Gateway
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set