HTTPS之TLS1.2连接详解

2023-10-27

本文说一下HTTPS的会话连接详情,HTTPS连接除了正常的TCP三次连接,还引入了TLS连接。

本文说的是基于

在这里插入图片描述

1、三次握手连接

首先通过三次握手连接来建立连接

接下来就是TLS连接

2、TLS第一次握手 ——ClientHello

客户端首先明文发送以下信息,用于建立加密连接
1、随机数ClientRandom
客户端生成一个随机数ClientRandom ,用于后面合成 密钥

2、TLS版本号
客户端支持的TLS版本号

3、加密套件列表
客户端支持的加密算法列表
在这里插入图片描述

套件包括以下信息:
摘要算法: 签名中的压缩算法
密钥生成算法: 用于生成密钥
对称加密算法: 后续传输数据用什么算法进行对称加密
非对称加密算法: 传输密钥的时候用什么非对称加密算法

在这里插入图片描述

3、TLS第二次握手

服务器收到客户端发送的ClientHello,然后发送回应信息到客户端,分为以下三个包

1、ServerHello

ServerHello中包括以下信息
1、确认TLS版本号
确认客户端发送的TLS版本号,如果不支持客户端对应的TLS版本,就中断连接。

2、随机数ServerRandom
服务器也随机生成一个随机数ServerRandom,用于后面合成密钥

3、加密套件
服务器从客户端中发来的加密算法列表中选择一个套件作为加密套件

在这里插入图片描述

2、Certifacte

返回服务器的CA证书,客户端从CA证书中获取公钥
在这里插入图片描述

3、Server Key Exchange

TLS中的密钥生成非常复杂,不是简单的由客户端生成一个随机数,而是利用ECDHE 算法生成一个对称密钥,然后在和客户端生成的一个随机数、服务器生成的一个随机数合成一个更随机的密钥。

ECDHE算法可以根据两组公钥和私钥来生成一个对称密钥,假设由两组公钥和私钥,公钥1和私钥1是配对的,公钥2和私钥2是配对的。

密钥的生成流程如下:
1、制定参数,两组公钥和私钥共用一组参数
2、一个随机数作为私钥,每组都随机生成一个数作为私钥
3、根据私钥+参数 生成一个公钥,比如利用私钥1生成公钥1.
4、利用私钥1和公钥2经过运算得到一把密钥,利用私钥2和公钥1经过运算得到一把密钥,这两把密钥是一模一样的。

没错,两组公钥和私钥就分别对应着客户端和服务器。

服务器制定好参数,然后随机生成一个私钥1,然后利用规则生成一个公钥1。

服务器将 公钥1和参数包装为Server Param发送给客户端,这个过程叫做Server Key Change

Server Param会通过数字签名技术来保证黑客无法篡改服务器发送的公钥1。通过服务器之前的私钥(不是私钥1,而是CA证书对应的私钥)进行加密,由于之前客户端已经从CA证书中获取了对应的公钥,客户端是可以顺利解析出公钥1的。

通过参数和公钥是无法破解出私钥的,私钥就存放在本地,不会在网络中传输

ServerHelloDone
服务器发送ServerHelloDone,说明服务器已经将TLS需要的所有信息都发送给客户端了。

TLS第三次握手

客户端会从CA证书中获取到服务器对应的公钥,如果获取公钥失败,就说明CA证书被篡改了,就会终止连接。

接着生成一个随机数作为私钥2,利用私钥2和Server发过来的公钥1生成一个随机数 pre-master,同时利用ClientRandom、ServerRandom、pre-master这三个数生成了密钥。这就是之后 客户端和服务器之间进行对称加密的密钥。

ClientKeyExchange
利用服务器发过来的参数和私钥2,生成一个公钥2。然后将公钥2发送给服务器,这样叫做Client Key Exchange

客户端接着会发送一个Change Cipher Spec,表示客户端开始使用密文进行传输了。
在这里插入图片描述

然后发送一个Finished,里面记载着客户端在TLS握手期间向服务器发送的所有数据做一个摘要,服务器收到后,也会将服务器之前收到的数据也做一个摘要,比对是否一致,如果一致,说明TLS连接正常,没有被黑客篡改。
在这里插入图片描述

在TLS第三次握手后,客户端就可以开始发送密文数据了。

TLS四次握手

服务器在收到公钥2后,也会通过参数和私钥1生成一个密钥pre-master,然后根据ClientRandom、ServerRandom、pre-master这三个数生成最终的密钥。

然后也发送一个Change Cipher Spec,表示服务器也开始使用密文进行传输。

最后发送一个Finished,里面记载着服务器向客户端发送过的数据的摘要,客户端收到后,也会把之前接收服务器的数据做一个摘要,比对两者,如果一致,就说明连接安全,如果不一致,就说明数据被黑客篡改了。

为什么这么费劲的使用ECDHE算法来生成密钥呢?

1、如果由客户端随机生成一个密钥,是容易被黑客猜测到的,所以引入了ECDHE,来进一步增强随机性。
2、ECDHE比RSA具有前向安全。如果采用RSA的话,一旦服务器密钥泄露,黑客收集了之前的密钥传输数据,就能解密之前的连接对应密钥。如果该连接还在运行,数据就会泄露。并且之后的连接也会被泄露。

ECDHE不会通过服务器私钥生成对称密钥,而是每次连接都随机生成一个私钥来生成对称密钥,安全性高的狠。

RSA 和 ECDHE的区别

在这里插入图片描述

1、RSA的做法是客户端直接生成随机数,然后通过公钥传输给服务器就行了。少了ECDHE的密钥、ServerRandom、Client的等数据的传输过程。

2、ECDHE客户端在第三次握手就可以发送数据了,而RSA客户端需要四次握手后才能发送数据

3、ECDHE 比 RSA更安全。

如果服务器的私钥被泄露,那么RSA中的密钥传输到服务器的时候,黑客是可以将其解密出来的。

而ECDHE即使服务器的私钥泄露,也不会造成密钥泄露,因为密钥是由ECDHE的私钥控制生成的,并且ECDHE的私钥是随机生成的,实在太tm安全了

Finished校验的必要性

Finished校验是非常有必要的,如果不校验的话,不论是RSA传输pre-master的时候,还是ECDHE传输ClientRandom、ServerRandom、以及客户端的公钥2的时候,都有可能被篡改。

导致客户端和服务器对应的密钥不一致,虽然不会泄露数据,但是数据是不能正常解密的。

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

HTTPS之TLS1.2连接详解 的相关文章

随机推荐

  • 人工智能发展情况调研

    人工智能发展情况调研Artificial intelligence development circumstance investigation北京师范大学继续教育学院 2000级计算机科学与技术 赵旭峰E mail zxf95 163 c
  • Excel中如何找出两列数据中相同的数据,并且进行同行显示

    使用VLOOKUP方法即可 VLOOKUP A2 Sheet1 B C 1 0 的含义是 在sheet1工作表的B C区域的首列中查找等于a2的值 找到后 返回该区域的同行的值 最后的参数0表示精确查找 比如 想要列2根据列1中的数据进行排
  • PG概述及OSD对PG状态的影响

    前言 随着分布式存储的广泛应用 目前对PG的关注越来越多 本文基于ONStor分布式存储系统简要介绍一下PG的状态变化 重点说明OSD对PG状态的影响 一 Ceph分布式存储概述 Ceph是一个统一的分布式存储系统 设计初衷是提供较好的性能
  • Gazebo中特异性里程计odom的发布

    需求 将里程计 odom改成以小车初始位置为原点 车体坐标轴为方向建立坐标系 用该坐标系下的位姿作为里程计数据的位姿 分析 odom是ros发布的相对固定的里程计信息 不能使用命令行工具直接修改里程计信息参考的初始位置 因此 从 odom坐
  • QT5 创建“打开文件”按钮

    在GUI界面设计中 有时需要 打开文件 按钮 以加载外部文件 则需要我们用QFileDialog的静态函数完成 QT5中几个文件相关函数如下 函数名 作用 getOpenFileName 加载用户选择文件的文件名 getSaveFileNa
  • Java函数、数组

    Java函数 数组 函数 函数 就是定义在类中的具有特定功能的一段独立小程序 格式 修饰符 返回值类型 函数名 参数类型 参数1 参数类型 参数2 执行语句 return 返回值 返回值类型 函数运行后的结果的数据类型 参数类型 是形式参数
  • 手撸代码-删除链表的倒数第n个节点

    描述 给定一个链表 删除链表的倒数第 nn 个节点并返回链表的头指针 例如 给出的链表为 1 2 3 4 5 n 2n 2 删除了链表的倒数第 n 个节点之后 链表变为1 2 3 5 备注 题目保证 nn 一定是有效的 请给出时间复杂度为
  • Centos下配置Harbor私有仓库

    Centos下配置Harbor私有仓库 Harbor是一个开源的企业级容器镜像仓库 可以帮助用户建立和管理自己的私有Docker镜像仓库 本文将介绍在Centos操作系统下如何配置和使用Harbor私有仓库 安装Docker 首先 我们需要
  • 服务器安装完系统老重启,服务器老是自动重启

    服务器老是自动重启 内容精选 换一换 该任务以 Windows Server 2008 R2 64位 操作系统为例 指导用户安装Windows操作系统 由于镜像文件不同 安装步骤稍有不同 请根据实际的安装界面提示进行操作 请根据实际情况完成
  • linux文件系统初始化过程(3)---加载initrd(上)

    一 目的 本文主要讲述linux3 10文件系统初始化过程的第二阶段 加载initrd initrd是一个临时文件系统 由bootload负责加载到内存中 里面包含了基本的可执行程序和驱动程序 在linux初始化的初级阶段 它提供了一个基本
  • 如何在Linux中设置静态IP和配置网络

    如何在Linux中设置静态IP和配置网络 文章目录 如何在Linux中设置静态IP和配置网络 1 使用ifconfig的一次性修改 1 修改静态ip 2 修改网关 2 修改配置文件的永久性修改 1 Ubuntu相关系统 2 CentOS相关
  • C#+Sql Server开发一个简易的学生管理系统

    效果图 目前是这样 如果想做成这样 加一个DataGridView进行显示即可 使用VS2017新建一个控制台应用程序 连接数据库 即可对数据库进行增删改查 更多的功能还没有写 不适合直接拿去做课设 不过基本架子都有了 更多复杂的功能写sq
  • Qt之回调函数:6 在QT中使用回调函数替代信号槽

    文章目录 一 前言 二 如何使用CALLBACK工作 程序及解释 小方块 主窗口 MainWindow ui 总结 在QT中使用回调函数替代信号槽 前面讲了一堆 就是为了实现看到的这篇文章中的例子 由于对回调不懂 前前后后翻阅参考了一大堆优
  • 阻止a标签默认行为的几种简单方法

    1 a href Click Me a onclick方法负责执行js函数 而void是一个操作符 void 0 返回undefined 地址不发生跳转 a href Click Me a 和void 0 一样 都返回 undefined
  • 07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

    0 前言 一般我们自己创建的一些python项目 我们都需要创建虚拟环境 其中会下载很多包 也叫做依赖 但是我们在给他人分享我们的项目时 不能把虚拟环境打包发送给别人 因为每个人电脑系统不同 我们可以把依赖导出为依赖清单 然后别人有了我们的
  • ext显示服务器文件系统,centos – 如何找出ext3文件系统损坏的原因?

    我们有一个运行CentOS 5 8虚拟机的VMware vSphere 5环境 在过去两周内 我们遇到了五个虚拟机事件 这些虚拟机的文件系统已损坏 需要修复fsck 以下是我们在日志中看到的内容 Nov 14 14 39 28 hostna
  • Ubuntu卸载软件:3种卸载方式

    1 使用Synaptic软件包管理器进行卸载 打开软件包管理器 Ubuntu自带了一个GUI Graphical User Interface 图形化用户界面 软件包管理器 它可 以让你在一个可视化窗口中卸载程序 如果你不习惯使用命令行 这
  • spring报错 XXX will not be managed by Spring

    如上提醒表示当前不是Spring管理着呢 是你的数据库插件Mybatis或者MybatisPlus给你管理呢 所以Spring给你温馨提醒了一下而已 又没有报错 解决的办法是在数据查找的方法上添加 Transactional 然后就会变成s
  • error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 找到一个或多个多重定义的符号

    今天在搞一个动态链接库的时候 出现了这样的错误 1 gt mfcs100ud lib dllmodul obj error LNK2005 DllMain 12 已经在 MSVCRTD lib dllmain obj 中定义 1 gt E
  • HTTPS之TLS1.2连接详解

    本文说一下HTTPS的会话连接详情 HTTPS连接除了正常的TCP三次连接 还引入了TLS连接 本文说的是基于 1 三次握手连接 首先通过三次握手连接来建立连接 接下来就是TLS连接 2 TLS第一次握手 ClientHello 客户端首先