HTTPS(二):TLS/SSL四次握手及wireshark抓包分析

2023-11-06

1. TLS/SSL四次握手流程图:

  HTTPS实现安全通信的方法就是在原有的HTTP层与TCP之间加入TLS/SSL协议层(收发报文不再使用Socket API,而是调用专门的安全接口)。

  在使用对称密钥加密通信之前,HTTPS需要先使用 “密钥交换算法”(非对称密钥加密算法)进行对称密钥的协商,而TLS四次握手的目的也正在于此。 本文中以RSA非对称加密算法为例,说明TLS四次握手的过程。


TLS四次握手流程图:

在这里插入图片描述




2. RSA握手过程wireshark抓包分析:

RAS四次握手的整体示意图:
在这里插入图片描述


2.1 TLS第一次握手:

  客户端发送 Client Hello消息,跟服务器打招呼,其中主要携带:

客户端的TLS版本号(Version)、
客户端支持的加密套件列表(Cipher Suites)、
客户端生成的随机数(Client Random)

在这里插入图片描述


2.2 TLS第二次握手:

2.2.1 Server Hello :

  服务器收到客户端的Client Hello消息后,首先回复 Server Hello 消息,其中主要包括:

服务器确认支持客户端的TLS版本(Version)、
服务器从客户端发来的加密套件列表中选出一个最合适的加密组合(Cipher Suite)、
服务器生成的随机数(Server Random)

在这里插入图片描述

本例中,服务器选择的加密套件为:

Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256

这是 “TLS安全密码套件”的固定格式:

在这里插入图片描述

TLS安全密码套件的基本形式:

密钥交换算法(ECDHE)+签名算法(RSA)+对称加密算法(AES)+摘要算法(SHA256)

(1)“ECDHE” + “RSA” 共同组成了密码套件中的“非对称加密算法”部分:分别用于“密钥交换”和“签名”;
(2)“AES” + “128” + “GCM” 共同组成了密码套件中的“对称加密算法”部分:“AES”指明所采用的对称加密算法的类型;“128”表示AES的密钥长度;“GCM”为“加密分组模式”,可使AES算法用固定长度的密钥加密任意长度的明文,即将密钥转换为密文;
(3)“SHA256” 表示密码套件中的“摘要算法”类型;
(4)“WITH” 关键字用于分割套件中的非对称加密算法部分和对称加密算法部分。


2.2.2 Cerficate :

  随后,服务器为了证明身份,会给客户端发送数字证书,即 Certificate 消息:
(其中包含CA机构为服务器颁发的公钥、CA机构签名等信息)


在这里插入图片描述


一个Certificate证书的结构:

一个CA机构颁发的数字证书大概包含以下几个部分:
  (1)服务器的信息:例如证书拥有者(服务器)的域名等信息;
  (2)服务器的公钥:CA机构为这个服务器颁发的公钥,也是在后续TLS第三次握手时客户端所使用的公钥;
  (3)CA机构的签名:CA机构对证书的签名,即先对证书的明文部分计算哈希值(SHA256)得到摘要后,再用CA机构本身的私钥对摘要进行加密(RSA),得到CA机构的签名。

  从wireshark抓包的结果中可以看到,只有证书的签名部分是使用RSA私钥加密的,其他的服务器信息、服务器公钥部分作为证书的正文数据,是明文的。 因为RSA非对称加密的效率太低,所以只对明文的摘要进行加密,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输。


在这里插入图片描述


2.2.3 Server Hello Done :

  最后,服务器发送 Server Hello Done 消息给客户端,这条消息中并没有其他有价值的信息,仅仅是为了通知客户端第二次握手中服务器的所有消息都已发送完毕,


在这里插入图片描述


2.3 TLS第三次握手:

2.3.1 Client Key Exchange :

  客户端在收到服务器返回的 Server HelloCertificate 消息后,会使用操作系统内置的CA机构的公钥对证书进行解密,如果解密成功,得到 数据原文 及 摘要值 H1,然后客户端使用与CA机构相同的摘要算法(散列算法,SHA或MD5)对数据原文进行计算得到 摘要值 H2,比较 H1 与 H2,若完全相同则说明证书合法且未被其他人篡改,从而拿到服务器的RSA公钥。

  随后,客户端生成TLS握手过程中的 第三个随机数:PreMaster,并用服务器的公钥对其加密,通过 Client Key Exchange 消息发给服务器:


在这里插入图片描述


2.3.2 Change Cipher Spec :

  接着,客户端使用它所拥有的三个随机数 Client RandomServer RandomPreMaster 去生成 对称加密的密钥:Master Secret。客户端通过 Change Cipher Spec 消息将Master Secret 对称密钥发送给服务器,并通知服务器开始使用对称加密的方式进行通信。

  在此之前的握手消息都是明文的,但只要出现了"Change Cipher Spec" 消息,之后的握手消息就都是密文了,wireshark抓到的数据包也会是乱码。

在这里插入图片描述


2.3.3 Encrypted Handshake Message :

  最后,客户端发送 Encrypted Handshake Message 消息,将之前发送的所有数据做成摘要,使用Master Secret 对称密钥加密(这条消息已经是对称加密),供服务器验证之前握手过程中的数据是否被其他人篡改。


在这里插入图片描述


2.4 TLS第四次握手:

2.4.1 Change Cipher Spec :

  服务器在收到客户端的 Client Key Exchange 消息后,使用RSA私钥对其解密,得到客户端生成的随机数 PreMaster,至此服务器也拥有了与客户端相同的三个随机数:Client RandomServer RandomPreMaster,服务器也使用这三个随机数计算对称密钥,将计算后的结果通过 Change Cipher Spec 消息返回给客户端。
(RSA非对称加密的作用就在于 对第三个随机数"PreMaster"的加密,前面两个随机数都是公开的)


2.4.2 Encrypted Handshake Message :

  服务器通过 Encrypted Handshake Message 消息将之前握手过程中的数据生成的摘要 使用对称密钥加密后 发给 客户端,供客户端进行验证。至此TLS四次握手完毕。


总结TLS四次握手的具体消息流程:

1. client hello			--- tls, client random, cipher suites				

2. server hello			--- tls, server random, cipher suite
3. certificate			--- certificate(pubkey)
4. server hello done

5. client key exchange	--- premaster (encrypted by pubkey)
6. change cipher spec	--- master secret
7. encrypted handshake message(finished)

8. change cipher spec	-- premaster (decrypt premaster by privatekey)
9. encrypted handshake message(finished)

cipher      [ˈsaɪfə(r)]		n. 密码
encrypted   [ɪnˈkrɪptɪd]	v. 把...加密, 加密的

3. TLS四次握手过程中使用到的加密算法分类:

第一类:非对称加密算法:

  RSA:
  ECDHE:

非对称加密算法的作用是在四次握手过程中交换密钥。

第二类:对称加密算法:

  AES:
  DES:

对称加密算法的作用是在完成TLS四次握手后,在数据交换过程中对数据进行加密、解密。

DES = Data Encryption Standard, “数据加密标准”
AES = Advanced Encryption Standard, “高级加密标准”

AES是比DES更完善的对称加密算法。

第三类:散列算法(哈希算法、摘要算法):

 MD5:
 SHA256:

散列算法的作用是对输入的数据生成固定长度的摘要,精简数据量量,且过程不可逆(只能从数据生成摘要,不能从摘要反推出数据)。

SHA是比MD5更完善的散列算法。


注: 文中部分图片来自:
https://www.cnblogs.com/xiaolincoding/p/14274353.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTPS(二):TLS/SSL四次握手及wireshark抓包分析 的相关文章

  • C# HttpWebRequest 服务器未返回完整响应

    我正在向返回带有数据的 HTML 的服务器发出 HTTP 请求 但有时它会 停在中间 没有任何明确的解释 例如响应结束 Content length 14336 chars p p br ul ul example com var auth
  • 两个http请求可以合并在一起吗?如果可以的话,nodeJS服务器如何处理呢?

    昨天我做了一些关于 NodeJS 的演讲 有人问我以下问题 我们知道nodeJS是一个单线程服务器 多个请求是 到达服务器并将所有请求推送到事件循环 如果什么 两个请求同时到达服务器 服务器将如何处理 处理这种情况 我猜到了一个想法并回复如
  • 如果 POST 成功但没有创建任何新内容,我们应该返回什么状态代码?

    我们有一个端点 当您发布创建新版本的资源时 它会返回 201 和新创建的资源的位置 它根据当前版本和发布的版本 使用类似 semver 的规则集 的比较来确定新版本号 如果您发布的版本与现有版本相同 则不会更新版本号 在这种情况下我们应该返
  • TRESTRequest:是否可以在 POST 请求中使用自定义媒体类型?

    例如 我们有一个 API 需要我们自己的供应商特定内容类型application vnd xxxx custom custom data json但查看 REST Client 的源代码 它似乎总是默认为 REST Types 中的 Con
  • 使用矩阵参数创建 GET 请求

    我将使用的网络服务需要矩阵参数 http tester com v1 customers lastname Jackson firstname Tim bookingreference 7Y9UIY 而不是通常的 http tester c
  • 为什么 HttpClient 使套接字保持打开状态?

    在创建 使用和处置多个 HttpClient 时 我注意到有套接字处于 TIME WAIT 状态 例如 运行以下命令后 using System Net Http namespace HttpClientTest public class
  • 如何从 Kubernetes 服务背后的 HTTP 请求读取客户端 IP 地址?

    我的 Web 应用程序作为 Kubernetes pod 在 SSL 的 nginx 反向代理后面运行 代理和我的应用程序都使用 Kubernetes 服务进行负载平衡 如所述here http blog kubernetes io 201
  • 内容长度标头与分块编码

    我正在尝试权衡设置的利弊Content LengthHTTP 标头与使用分块编码从我的服务器返回 可能 大文件的比较 使用持久连接需要其中之一来符合 HTTP 1 1 规范 我看到了的优点Content Length标头是 下载对话框可以显
  • Express.js在控制器中获取http方法

    我正在构建一个注册表单 本地护照作为身份验证 表单作为表单助手 因为注册只知道 GET 和 POST 我想在一个函数中完成整个处理 换句话说 我正在寻找类似的东西 exports register function req res if r
  • 如何让 NSURLRequest 获取 Twitter 请求令牌?

    我正在尝试使用以下代码从 Twitter 获取请求令牌 NSMutableURLRequest mURLRequest NSMutableURLRequest alloc initWithURL NSURL URLWithString ht
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not
  • 按照约定应返回哪些 REST PUT/POST/DELETE 调用?

    根据 REST 意识形态 PUT POST DELETE 请求的响应正文中应该包含什么 返回码呢 是HTTP OK enough 如果有的话 这种约定的原因是什么 我发现了一篇描述 POST PUT 差异的好文章 发布与放置 http ww
  • 如何禁用 HTTP 的 HSTS 标头?

    我已将以下内容插入到我网站的 htaccess 中 以便能够访问HSTS预加载列表 https hstspreload appspot com
  • 如何增加asp classic的请求接受限制

    我从java小程序向asp classic发送post请求 我在此请求中发送非常大的数据 即 csv 数据 当此请求中的字符数增加并超过 138000 时 asp 不接受该请求 java 小程序给出 500 错误 所以有人可以告诉我如何才能
  • iOS 上的多个 HTTP 请求与单个 TCP 连接

    我正在开发一个 iPhone 应用程序 它使用我控制的基于 Web 的 API 连接到持续打开的 TCP 端口并通过 TCP API 发出请求 或者为我想要获取的所有数据发出新的 HTTP 请求 会更快或更高效吗 我认为差异可以忽略不计 但
  • ASP.NET Core URL 重写

    我正在尝试将我的网站从 www 重定向到非 www 规则以及 http 到 https https example com https example com 在中间件中 我曾经在 web config 中进行这些重定向更改 例如
  • ASP.NET 中 HTTP 缓存相关标头的有效含义

    我正在 ASP NET 2 0 中开发一个 Web 应用程序 其中涉及通过资源处理程序 ashx 提供图像 我刚刚实现了处理缓存标头和条件 GET 请求 这样我就不必为每个请求提供所有图像 但我不确定我是否完全理解浏览器缓存发生了什么 图像

随机推荐

  • 使用nmcli命令配置虚拟机网络

    简述 什么是nmcli Description nmcli is a command line tool for controlling NetworkManager and reporting network status It can
  • Mybatis 获取当前序列和下一个序列值 以及在一个方法中写多条SQL 语句

    目录 1 Mybatis 获取当前序列和下一个序列值 2 Mybatis 在一个方法中写多条SQL 语句 1 Mybatis 获取当前序列和下一个序列值 获取当前序列值 select XXX sequence currval from du
  • 电子信息工程毕设题目选题大全

    文章目录 1前言 2 如何选题 3 选题方向 3 1 嵌入式开发方向 3 2 物联网方向 3 3 移动通信方向 3 4 人工智能方向 3 5 算法研究方向 3 6 移动应用开发方向 3 7 网络通信方向 3 8 学长作品展示 4 最后 1前
  • Jetpack-Compose之一基础使用

    一 命令式UI和申明式UI 如果之前有了解或者使用果Flutter 应该会对命令式UI这种架构不陌生 目前申明式UI确实是很火包含Flutter SwiftUI JetpackCompose都使用了该种方式 2021年7月底 Google
  • mysql数据库容量规划_MySQL数据库服务器整体规划(方法论)

    我们在搭建MySQL数据库服务器的开始阶段就合理的规划 可以避免以后的很多问题的产生 大大节省我们的时间和精力 在一定幅度上降低成本 当然 这会涉及很多方面 比如机器的选型 业务评估和系统规划等 所有的设计都是跟具体的需求相关的 我们首先要
  • 什么是 DNS ANAME 解析?

    本人使用谷歌搜索了简中互联网 完全没有找到任何有关 ANAME 的文章 本文该不会是头一份吧 相信大家对于 DNS 的解析方式都不陌生 常见的有 A CNAME MX TXT 记录等等 其中 网站常用的是 A 记录和 CNAME 记录 A
  • [贪心入门]完美字符串

    约翰认为字符串的完美度等于它里面所有字母的完美度之和 每个字母的完美度可以由你来分配 不同字母的完美度不同 分别对应一个1 26之间的整数 约翰不在乎字母大小写 也就是说字母F和f 的完美度相同 给定一个字符串 输出它的最大可能的完美度 例
  • spyglass的waiver使用问题总结-工具(八)

    spyglass使用过程中waiver warning及error过程中总会出现生效不成功的问题 总结使用步骤供参考 实践出真知 解决问题就是好方法 1 在spyglass的prj中设置默认waiver文件 2 如何waiver 3 查看已
  • SpringBoot集成ZipKin实现链路跟踪

    SpringBoot集成ZipKin实现链路跟踪 1 我们要做什么 当我们的服务器成千上万 当我们的模块上万成千 当我们的调用链路复杂如蜘蛛网时 我们突然发现一个小小的性能问题却不能快速定位到点 千万不要以为自己是神 当年那个觉得ELK日志
  • stm32f10x中GPIOA理解(二)

    一 要理解固定库操作GPIOx的寄存器 首先固定库通过 void GPIO Init GPIO TypeDef GPIOx GPIO InitTypeDef GPIO InitStruct 函数来实现的 这函数 操作寄存器CRL和CRH 二
  • Qt 6: 1-9 信号和槽

    文章目录 概念 声明 手动关联 自动关联 断开关联 概念 作用 改变一个部件时 其他部件也能了解到 槽 一个函数 在信号发射后被调用 关系 信号和槽是一对多 多对一或者多对多关系 多个槽关联一个信号时 多个槽按关联顺序执行 拥有槽的累必须拥
  • java.sql.SQLException: ORA01555: 快照过旧: 回退段号 4 过小

    首先了解Oracle在什么情况下会产生ORA 01555错误 假设有一张6000万行数据的testdb表 预计testdb全表扫描1次需要2个小时 参考过程如下 1 在1点钟 用户A发出了select from testdb 此时不管将来t
  • 理解期货穿透式监管

    穿透式监管 关于就 关于进一步加强期货经营机构客户交易终端信息 采集有关事项的公告 公开征求意见的通知 期货公司客户交易终端信息采集及接入认证技术规范 简单理解就是 监控中心为了方便监管 需采集所有通过期货公司入场交易的客户的本地终端信息
  • 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。

    从键盘读入个数不确定的整数 并判断读入的正数和负数的个数 输入为0时结束程序 题目描述 从键盘读入个数不确定的整数 并判断读入的正数和负数的个数 输入为0时结束程序 解题思路 因为读入的个数不确定 所以需要一个无限循环 当输入为 时 bre
  • leetcode237 删除链表中的节点

    题目 有一个单链表的 head 我们想删除它其中的一个节点 node 给你一个需要删除的节点 node 你将 无法访问 第一个节点 head 示例 输入 head 4 5 1 9 node 5 输出 4 1 9 解释 指定链表中值为 5 的
  • Windows环境MySql8.0忘记root密码重置

    MySQL忘记root密码之后 可以通过skip grant tables来暂时免密登录MySQL 从而修改root密码 但是这种方式一方面有安全隐患 另一方面也并不怎么适用于Windows系统 而且Windows环境下使用skip gra
  • ui-router---$stateProvider

    stateProvider stateProvider state stateName stateConfig Creates a new application state For alternate usage see Object b
  • 安卓逆向入门指南:介绍与准备

    安卓逆向入门指南 介绍与准备 简介 安卓逆向工程是指通过分析 修改和破解安卓应用程序 获取其内部逻辑 探索其实现细节或者进行二次开发的技术过程 在这个系列博客中 我们将介绍安卓逆向的基础知识 常用工具和技术 并通过实例演示来帮助初学者入门
  • 【超简单的串口通信的工作原理】

    下图是电脑收到单片机经过串口发送的信息 那么电脑是如何与单片机进行串口通信的呢 首先 任何一种通信都要包括硬件物理接口和软件通信协议 串口通信物理接口如下图 单片机通过发送端将数据从左往右一位一位按顺序发送 且在发送前 我们需要事先约定好帧
  • HTTPS(二):TLS/SSL四次握手及wireshark抓包分析

    1 TLS SSL四次握手流程图 HTTPS实现安全通信的方法就是在原有的HTTP层与TCP之间加入TLS SSL协议层 收发报文不再使用Socket API 而是调用专门的安全接口 在使用对称密钥加密通信之前 HTTPS需要先使用 密钥交