Security ❀ HTTP/HTTPS逐包解析交互过程细节

文章目录

  • 1. TCP三次握手机制
  • 2. HTTP Request 请求报文
  • 3. HTTP Response 响应报文
  • 4. SSL/TLS协议
    • 4.1. ClientHello 客户端Hello报文
    • 4.2 ServerHello 服务器Hello报文
    • 4.3. *ServerKeyExchange 服务公钥交换
    • 4.4. ClientKeyExchange 客户端公钥交换
    • 4.5. *CertificateVerify 证书验证报文
    • 4.6. ChangeCipherSpec 更改密钥规格
    • 4.7. Application Data 应用数据报文
    • 4.8. fnished 传输结束报文

本文主要解析 TCP -> HTTP -> SSL/TLS 交互过程中的数据包详细信息。

1. TCP三次握手机制

Client使用随机端口请求Server的HTTP服务80端口(序号1、2、5);
在这里插入图片描述

2. HTTP Request 请求报文

当TCP连接建立完成后,Client发送HTTP请求服务端资源,服务器收到请求后会回复ACK(序号7、8);
在这里插入图片描述
请求类型

  • GET:参数携带位置在URI处;
  • POST:参数携带位置在正文处;
  • PUT:更新资源;
  • DELETE:删除资源;

结尾标识

  • \r\n:字段结尾标识符。

3. HTTP Response 响应报文

当服务器收到HTTP合理且符合规范的请求后,会做出响应,转发到Client;
在这里插入图片描述

4. SSL/TLS协议

SSL/TLS是一个安全通信框架,上面可以承载HTTP协议或者SMTP/POP3协议等(本次以TLS 1.0协议为案例做描述讲解)。协议握手过程如下:
在这里插入图片描述
本文部分报文图片来源于网络,其中169.254.255.66为客户端,169.254.100.98为服务器。

4.1. ClientHello 客户端Hello报文

Client向Server发送一个Hello信息(包26),包含其:可用版本号、当前时间(位于随机数字段下)、客户端随机数(防伪造)、会话ID(会话保持机制)、可用的加算法清单、可用的压缩方式清单;
在这里插入图片描述

常见的12种加密算法:
在这里插入图片描述

扩展内容:
在这里插入图片描述

4.2 ServerHello 服务器Hello报文

Server收到Client的Hello报文后,会向客户端回复一个Hello消息(包27),包含其服务侧的信息:使用的版本号、当前时间、服务器随机数、会话ID、使用的加密算法、使用的压缩方式、CA证书;
在这里插入图片描述
Certificate CA证书:服务侧需要发送自己的证书清单,证书可能是层级结构的,因此除了服务侧本身的证书外还需要提供为服务侧签名的证书,用来证明服务器的合法性。
在这里插入图片描述

4.3. *ServerKeyExchange 服务公钥交换

若服务侧的CA证书信息不足时,可以使用ServerKeyExchange构建加密通道;
ServerKeyExchange包含两种形式:

  • RSA形式加密:传递的就是RSA构建公钥密码的参数E、N;
  • Diff-Hellman密钥交互协议加密:传递的就是密钥交换的参数;

注意,注意,注意:若服务器发送Hello时携带了done的消息,则告诉客户端自己所发的消息结束了,并不会存在ServerKeyExchange报文(包27最底下字段内容)。
在这里插入图片描述

4.4. ClientKeyExchange 客户端公钥交换

ClientKeyExchange仍包含两种方式:

  • 公钥或者RSA模式(包28):Client根据ClientHello的随机数和ServerHello的随机数生成预备主密码,通过该公钥进行加密,返回到服务侧;
  • Diff-Hellman:Client会发送自己这一方要生成Diff-Hellman密钥而需要公开的值。
    在这里插入图片描述

4.5. *CertificateVerify 证书验证报文

Client向Server证明自己是Client证书的持有者。

4.6. ChangeCipherSpec 更改密钥规格

服务器告知客户端切换密码规格(包29),表示后面的消息将会以前面协商通过的密钥进行加密传输。
在这里插入图片描述

4.7. Application Data 应用数据报文

数据传输报文(包30)。
在这里插入图片描述

4.8. fnished 传输结束报文

传输结束标识,代表握手协议结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/248057.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯---九数组分数

1,2,3 ... 9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码。 注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。 代码 public class _05九数组分数 {public static void test(int[] x){int a …

[网鼎杯 2018]Fakebook1

join一个用户后,点进去发现是这样的 查看这个页面的源代码,发现一个base64编码后的字串 decode之后就是我们join新用户时填入的blog网址 那我们是不是可以通过填入存储flag的地址,从而回显出来呢?当然,先按照常规sqli…

C语言应用实例——贪吃蛇

(图片由AI生成) 0.贪吃蛇游戏背景 贪吃蛇游戏,最早可以追溯到1976年的“Blockade”游戏,是电子游戏历史上的一个经典。在这款游戏中,玩家操作一个不断增长的蛇,目标是吃掉出现在屏幕上的食物&#xff0c…

物联网IOT视频设备如何快速对接阿里云生活物联网(Link Visual)并成功上云?

原文永久更新地址:https://www.yundashi168.com/472.html 文章来源:猿视野 如果有图片看不清楚,加载不出来,请阅读原文。 什么是Link Visual、 Link Visual是生活物联网平台针对视频产品推出的增值服务,提供视频数据上…

第一节 分布式架构设计理论与Zookeeper环境搭建

目录 1. 分布式架构设计理论 1. 分布式架构介绍 1.1 什么是分布式 1.2 分布式与集群的区别 1.3 分布式系统特性 1.4 分布式系统面临的问题 2. 分布式理论 2.1 数据一致性 2.1.1 什么是分布式数据一致性 2.1.2 副本一致性 2.1.3 一致性分类 2.2 CAP定理 2.2.1 CAP定…

Habitat环境学习二:导航任务中的Habitat-sim基础Habitat-sim Basics for Navigation

导航任务在Habitat-sim任务中的实现 官方教程概述重要概念1、Hello World程序1.0.1 基础设置Basic settings1.0.2 模拟器设置Configurations for the simulator1.0.3 创建模拟器实例1.0.4 初始化Agent1.0.5 导航和探索 官方教程 Habitat是一个高效的真实的3D模拟器&#xff0c…

【C++进阶】STL容器--list使用迭代器问题分析

目录 前言 1. list的基本使用 1.1 list构造函数 1.2 list迭代器 1.3 list capacity 1.4 list元素访问 1.5 list 修改操作 insert erase swap resize clear 2. list失效迭代器问题 3. list使用算法库函数问题 总结 前言 list(链表)在C中非常重要…

OpenAI发布新模型!ChatGPT性能重磅提升,API大幅降价,GPT-4 「变懒」被修复

OpenAI 对ChatGPT进行了大更新:推出了新一代的嵌入模型,对GPT-4 Turbo模型进行了更新,并将很快对GPT-3.5 Turbo的API进行大幅降价,GPT-4「变懒」行为也被修复。 接下来二狗就带大家看看ChatGPT的这次详细更新。 推出新的嵌入模型…

Shell中sed编辑器

1.简介 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个 命令文本文件中。 2.sed编辑器的工作流程 sed…

Adobe Photoshop 2024 v25.4.0 - 专业的图片设计软件

Adobe Photoshop 2024 v25.4.0更新了,从照片编辑和合成到数字绘画、动画和图形设计,任何您能想象到的内容都能通过PS2024轻松实现。 利用人工智能技术进行快速编辑。学习新技能并与社区分享您的工作。借助我们的最新版本,做令人惊叹的事情从未…

【C/C++ 05】快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序算法,其基本思想是:任取待排序序列中的某元素作为基准值,按照该基准值将待排序集合分割成两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于…

uniapp H5 实现上拉刷新 以及 下拉加载

uniapp H5 实现上拉刷新 以及 下拉加载 1. 先上图 下拉加载 2. 上代码 <script>import DragableList from "/components/dragable-list/dragable-list.vue";import {FridApi} from /api/warn.jsexport default {data() {return {tableList: [],loadingHi…

路由反射器 RR 配置实验

一、预习&#xff1a; RR&#xff1a;Route Reflect&#xff0c;是为了解决 IBGP 水平分割问题&#xff0c;即&#xff1a;【BGP 路由器从 IBGP 收到的路由&#xff0c;不会传递给其他 IBGP 邻居】&#xff0c;因此需要使用路由反射器&#xff0c;这样&#xff0c;未收到路由的…

【Java反序列化】Shiro-550漏洞分析笔记

目录 前言 一、漏洞原理 二、Shiro环境搭建 三、Shiro-550漏洞分析 解密分析 加密分析 四、URLDNS 链 前言 shiro-550反序列化漏洞大约在2016年就被披露了&#xff0c;在上学时期也分析过&#xff0c;最近在学CC链时有用到这个漏洞&#xff0c;重新分析下并做个笔记&…

260:vue+openlayers 通过webgl方式加载矢量图层

第260个 点击查看专栏目录 本示例介绍如何在vue+openlayers中通过webgl方式加载矢量图层。在做这个示例的时候,采用vite的方式而非webpack的方式。这里的基础设置需要改变一下。 ol的版本7.5.2或者更高。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文…

如何使用docker compose安装APITable并远程访问登录界面

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 …

【虚拟机数据恢复】异常断电导致虚拟机无法启动的数据恢复案例

虚拟机数据恢复环境&#xff1a; 某品牌R710服务器MD3200存储&#xff0c;上层是ESXI虚拟机和虚拟机文件&#xff0c;虚拟机中存放有SQL Server数据库。 虚拟机故障&#xff1a; 机房非正常断电导致虚拟机无法启动。服务器管理员检查后发现虚拟机配置文件丢失&#xff0c;所幸…

idea 打包跳过测试

IDEA操作 点击蓝色的小球 手动命令 mvn clean package -Dmaven.test.skiptrue# 下载源码![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff15aad1c9a546b6ab0556b5b135f409.png)

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

C语言菜鸟入门·判断语句(if语句、if...else语句、嵌套if语句)详细介绍

目录 1. if语句 2. if...else语句 3. if...else if...else 语句 4. 嵌套if语句 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 语句描述if语句一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if...else语句一个 if 语句 后可跟…