HTTPS ECDHE 握手解析(计算机网络)

使用了 ECDHE,在 TLS 第四次握手前,客户端就已经发送了加密的 HTTP 数据,而对于 RSA 握手过程,必须要完成 TLS 四次握手,才能传输应用数据。

所以,ECDHE 相比 RSA 握手过程省去了一个消息往返的时间,有点「抢跑」的意思,它被称为是「TLS False Start」,跟「TCP Fast Open」有点像,都是在还没连接完全建立前,就发送了应用数据来提高传输效率。

TLS 第一次握手

客户端首先会发一个「Client Hello」消息,消息里面有客户端使用的 TLS 版本号、支持的密码套件列表,以及生成的随机数(Client Random

TLS 第二次握手

服务端收到客户端的「打招呼」,会返回「Server Hello」消息,消息面有服务器确认的 TLS 版本号,也给出了一个随机数(Server Random,然后从客户端的密码套件列表选择了一个合适的密码套件。

接着,服务端为了证明自己的身份,发送「Certificate」消息,会把证书也发给客户端。

下面这一步就和 RSA 握手过程有很大的区别了,因为服务端选择了 ECDHE 密钥协商算法,所以会在发送完证书后,会发送「Server Key Exchange」消息,RSA则没有发送该消息。

这个过程服务器做了三件事:

  • 选择了一种椭圆曲线,选好了椭圆曲线相当于椭圆曲线基点 G 也定好了,这些都会公开给客户端;
  • 生成随机数作为服务端椭圆曲线的私钥,保留到本地;
  • 根据基点 G 和私钥计算出服务端的椭圆曲线公钥,这个会公开给客户端。

为了保证这个椭圆曲线的公钥不被第三方篡改,服务端会用 RSA 签名算法给服务端的椭圆曲线公钥做个签名。

随后,就是「Server Hello Done」消息,服务端跟客户端表明:“打招呼完毕”。

至此,TLS 两次握手就已经完成了,目前客户端和服务端通过明文共享了这几个信息:Client Random、Server Random 、使用的椭圆曲线、椭圆曲线基点 G、服务端椭圆曲线的公钥,这几个信息是后续生成会话密钥的材料。

TLS 第三次握手

客户端收到了服务端的证书后,会校验证书是否合法,如果证书合法,那么服务端到身份就是没问题的。校验证书的过程会走证书链逐级验证,确认证书的真实性,再用证书的公钥验证签名,这样就能确认服务端的身份了,确认无误后,就可以继续往下走。

客户端会生成一个随机数作为客户端椭圆曲线的私钥,然后再根据服务端前面给的信息,生成客户端的椭圆曲线公钥,然后用「Client Key Exchange」消息发给服务端。

至此,双方都有对方的椭圆曲线公钥、自己的椭圆曲线私钥、椭圆曲线基点 G。于是,双方都就计算出点(x,y),其中 x 坐标值双方都是一样的。

最终的会话密钥,就是用「客户端随机数 + 服务端随机数 + x(ECDHE 算法算出的共享密钥) 」三个材料生成的

之所以这么麻烦,是因为 TLS 设计者不信任客户端或服务器「伪随机数」的可靠性,为了保证真正的完全随机,把三个不可靠的随机数混合起来,那么「随机」的程度就非常高了,以增加安全性。

算好会话密钥后,客户端会发一个「Change Cipher Spec」消息,告诉服务端后续改用对称算法加密通信。

接着,客户端会发「Encrypted Handshake Message」消息,把之前发送的数据做一个摘要,再用对称密钥加密一下,让服务端做个验证,验证下本次生成的对称密钥是否可以正常使用。

TLS 第四次握手

最后,服务端也会有一个同样的操作,发「Change Cipher Spec」和「Encrypted Handshake Message」消息,如果双方都验证加密和解密没问题,那么握手正式完成。于是,就可以正常收发加密的 HTTP 请求和响应了。

RSA 和 ECDHE 握手过程的区别:

  • RSA 密钥协商算法「不支持」前向保密,ECDHE 密钥协商算法「支持」前向保密;
  • 使用了 RSA 密钥协商算法,TLS 完成四次握手后,才能进行应用数据传输,而对于 ECDHE 算法,客户端可以不用等服务端的最后一次 TLS 握手,就可以提前发出加密的 HTTP 数据,节省了一个消息的往返时间;
  • 使用 ECDHE, 在 TLS 第 2 次握手中,会出现服务器端发出的「Server Key Exchange」消息,而 RSA 握手过程没有该消息;

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

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

相关文章

【计算机网络】select/poll

多路转接 - select/poll 一、I/O 多路转接之 select1. select 接口2. select 的使用3. select 的优缺点 二、I/O 多路转接之 poll1. poll 接口2. poll 的使用3. poll 与 select 的对比 一、I/O 多路转接之 select 多路转接属于 IO 复用方式的一种。系统提供 select() 函数来实…

Pinia的数据持久化

Pinia的数据持久化可以通过多种方式实现,例如使用vuex-persistedstate插件或专门为Pinia设计的插件如pinia-plugin-persist。下面我将通过一个简单的例子来说明如何使用Pinia及其数据持久化功能。 假设我们有一个简单的Vue 3应用程序,其中包含一个用户模…

R语言,数据类型转换

原文链接:R语言技能 | 不同数据类型的转换 本期教程 写在前面 今天是4月份的第一天,再过2天后再一次迎来清明小假期。木鸡大家是否正常放假呢? 我们在使用R语言做数据分析时,会一直对数据进行不同类型的转换,有时候…

【阅读笔记】《博物馆之眼》

笔记 “不论你踏进哪一所博物馆之前,适当地了解它的历史和藏品内容会给你极大的帮助,正如一份好的攻略会让你的旅途大大增值。” 上篇 博物馆文化现象 大英博物馆的第一批藏品由一个医生在死前捐给英国王室,王室随机修建了大英博物馆。 明长…

百度网站收录提交入口

百度网站收录提交入口 在网站刚建立或者更新内容后,及时将网站提交给搜索引擎是提高网站曝光和获取流量的重要步骤之一。百度作为中国最大的搜索引擎之一,网站在百度中的收录情况尤为重要。下面介绍一下如何通过百度的网站收录提交入口提交网站。 1. 百…

代码随想录算法训练营第39天|62.不同路径 |63. 不同路径 II

代码随想录算法训练营第39天|62.不同路径 |63. 不同路径 II 详细布置 62.不同路径 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。 https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html 视频讲解:https…

封装表格组件,最后一列动态生成 vue3子组件通过slot传值向父组件

将表格二次封装,方便以后开发中的复用。每次只需调用表格组件后,在父组件中往子组件标签上写入dataSource(表格数据)和columns(表格列标题)即可。 此案例中最后一列是删除按钮,动态生成&#xf…

DFS2 C++

一、指数型枚举 1、题目: 从 1∼n1∼ 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 输入格式 输入一个整数 n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列,相邻两个数用恰好 11 个空格隔开。 对于没有选任何…

Day29 多线程

Day29 多线程 一、什么是进程 进程是系统进行资源分配和调用的独立单元,每一个进程都有它的独立内存空间和系统资源。 二、单进程操作系统和多进程操作系统的区别 单进程操作系统:dos(一瞬间只能执行一个任务) 多进程单用户操作系…

Spire.PDF for .NET【文档操作】演示:合并 PDF 文件并添加页码

搜索了这么多有关 PDF 合并的信息后,很容易发现,无论您在线合并 PDF 文件还是使用 C#/VB.NET 来实现此任务,您都无法逃避对 PDF 文件安全等一些重要问题的担忧,因此需要花费多少时间或者合并后的文件是否支持打印页码等等。不过&a…

Python深度学习033:Python、PyTorch、CUDA和显卡驱动之间的关系

Python、PyTorch、CUDA和显卡驱动之间的关系相当紧密,它们共同构成了一个能够执行深度学习模型的高效计算环境。下面是它们之间关系的简要概述: Python Python 是一种编程语言,广泛用于科学计算、数据分析和机器学习。它是开发和运行PyTorch代码的基础环境。PyTorch PyTorc…

VSCode中6个AI顶级插件

Visual Studio Code (VSCode) 是通往一系列 AI 驱动的编码支持的门户。探索精心挑选的 VSCode 顶级扩展,这些扩展利用人工智能的强大功能,包括 GitHub Copilot、TabNine 等著名工具。 1. GitHub Copilot:你的强人工智能结对程序员 GitHub Co…

【Frida】【Android】 07_爬虫之网络通信库HttpURLConnection

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

Word、Excel、PPT文件转PDF文件(C#)

一、添加依赖 为wpf项目引用Microsoft.Office.Interop.Excel、Microsoft.Office.Interop.PowerPoint、Microsoft.Office.Interop.Word、Office,依赖文件已经打到源代码包里了。 二、先定义一些命名空间 using Word Microsoft.Office.Interop.Word;using Excel M…

零基础入门转录组数据分析——DESeq2差异分析

零基础入门转录组数据分析——DESeq2差异分析 目录 零基础入门转录组数据分析——DESeq2差异分析1. 转录组分析基础知识2. DESeq2差异分析(Rstudio)3. 结语 1. 转录组分析基础知识 1.1 什么是转录组? 转录组(transcriptome&#…

n1.线性表及其实现

1.引入—多项式表示 对于多项式,如何使用程序进行编写呢? 方法一:一维数组。下标对应未知数的指数,元素个体对应系数。缺点就是都得全部表示,系数为0项的存在浪费空间。例如,x只有一次方和2000次方&#…

MySQL、Oracle查看字节和字符长度个数的函数

目录 0. 总结1. MySQL1.1. 造数据1.2. 查看字符/字节个数 2. Oracle2.1. 造数据2.2. 查看字符/字节个数 0. 总结 databasecharacterbyteMySQLchar_length()length()Oraclelength()lengthB() 1. MySQL 1.1. 造数据 drop table if exists demo; create table demo (id …

手机一键换ip地址,解锁网络自由

在数字化时代,手机已经成为我们生活中不可或缺的一部分。随着移动互联网的快速发展,手机用户对于网络安全和隐私保护的需求也日益增强。其中,IP地址作为手机在网络中的标识,扮演着重要的角色。有时,出于隐私保护或网络…

std::deque(双端队列)

std::deque(双端队列)是 C 标准模板库(STL)中的一个序列容器,它提供了在队列的两端进行插入和删除操作的高效实现。std::deque 可以被视为一个固定大小的数组,但它可以动态增长和缩减,且不需要在…