SSL/TLS 握手过程详解
SSL握手过程详解
- 1、SSL/TLS 历史发展
- 2、SSL/TLS握手过程概览
- 2.1、协商交换密码套件和参数
- 2.2、验证一方或双方的身份
- 2.3、创建/交换对称会话密钥
- 3、TLS 1.2 握手过程详解
- 4、TLS 1.3 握手过程详解
- 5、The TLS 1.2 handshake – Diffie-Hellman Edition
1、SSL/TLS 历史发展
可以理解TLS是SSL的升级版本。
SSL 的第一个可用版本——SSL 2.0——由 Netscape 设计并于 1995 年发布。然而,SSL 2.0 中发现了漏洞,要求 Netscape 设计一个更好、更安全的版本。 一年后SSL 3.0问世。 SSL 3.0 仍然被广泛使用,直到 2014 年秋天,Google 安全团队发现了一个重大安全漏洞。
TLS 1.0 于 1999 年首次被设计为 SSL 3.0 的另一个协议升级。虽然差异并不显着,但它们足够重要,以至于 SSL 3.0 和 TLS 1.0 无法互操作。 SSL 3.0 被认为不如 TLS 安全。
TLS 1.1 创建于 2006 年,TLS 1.2 于 2008 年发布。TLS 1.2 是目前使用的版本,TLS 1.3 在2018年8月发布。 与任何其他协议升级一样,TLS 被认为比 SSL 3.0 更安全,因为每个版本都增加了阻止利用和缓解漏洞的措施。
正如您所看到的,SSL 3.0 多年来一直存在安全问题,这需要更安全的解决方案。 与任何其他技术更新一样,每个版本都存在差异,但最终用户的最终产品是相同的。 当人们提到 SSL 或 TLS 时,他们通常谈论的是同一件事,除非他们指的是协议的不同版本。
SSL 和 TLS 这两个术语可以互换使用,因为这些协议以相同的方式加密信息,并且在最基本的层面上执行相同的操作。 TLS 是 SSL 的简单升级且更安全的版本。 TLS 现已在整个网络中广泛使用,并且是交易安全的首选。 可以在服务器上同时启用所有版本的 SSL 和 TLS。
所有数字证书均与 SSL 和 TLS 协议兼容。 但是,由于 SSL 3.0 中存在显着漏洞,DigiCert 建议您在服务器上完全禁用 SSL 3.0(如果您尚未这样做)。 通过禁用 SSL 3.0 并启用 TLS,管理员将获得相同级别的加密且不会出现漏洞。 如果您不确定启用了哪些 SSL/TLS 版本,您可以使用证书检查器进行漏洞扫描、分析等。
2、SSL/TLS握手过程概览
https连接有两个方面组成:客户单和服务器端。
客户端负责发起连接,服务端接受连接。客户端和服务端即是握手的两方。
SSL/TLS 握手的目的是执行安全连接所需的所有加密工作。 这包括验证正在使用的 SSL 证书并生成加密密钥。
SSL/TLS 握手的目的是执行安全连接所需的所有加密工作
TLS 握手完成了 3 个主要任务:
- 协商交换密码套件和参数
- 验证一方或双方的身份
- 创建/交换对称会话密钥
2.1、协商交换密码套件和参数
每个软件都是不同的。 Web 浏览器是最常见的客户端,Google Chrome、Mozilla Firefox 和 Microsoft Internet Explorer 等流行浏览器的功能可能有所不同。 同样,在服务器端,Windows Server、Apache 和 NGINX 等流行操作系统都有非常不同的功能支持。 当您添加自定义配置时,所有这一切都变得更加复杂。 因此,TLS 握手的第一步要求客户端和服务器共享其功能,以便它们能够找到相互支持的加密功能。
一旦客户端和服务器就他们将使用的确切加密方法达成一致(称为密码套件),服务器就会向客户端发送其 SSL 证书。
2.2、验证一方或双方的身份
收到证书后,客户会检查以确保证书是“真实的”。 这是极其重要的一步。 要真正拥有安全的连接,您不能只是加密数据,您还需要知道数据被发送到正确的网站/组织。 SSL/TLS 证书提供该身份验证。 但他们的做法取决于所使用的密码套件。
所有受信任的 SSL 证书均由证书颁发机构 (CA) 颁发,该机构是已获批准颁发数字证书的公司。 这些组织必须遵循严格的颁发和验证准则,以便他们颁发的证书继续受到信任。 这主要是为了确保您只能获得您真正拥有的网站或公司的证书。 在这种情况下,您可以将 CA 视为公证人 - 它的签名表明证书上的实体就是它所说的那个实体。
在 TLS 握手的身份验证部分期间,客户端执行多项加密安全检查,以确保服务器提供的证书是真实的。 这包括检查数字签名并确保证书来自受信任的 CA。
在此阶段,客户端还会验证服务器是否拥有与证书关联的私钥。 所有 SSL 证书都包含由公钥和私钥组成的密钥对。 公钥用于加密数据,私钥用于解密。 这被称为“非对称”公钥加密,因为这两个功能是由不同的密钥执行的。 加密实际上是单向的。
使用最常见的公钥密码系统 RSA,客户端将使用需要用于生成会话密钥的公钥来加密随机数据。 服务器只有拥有提供所有权证明的私钥才能解密和使用该数据。
如果使用另一种类型的密码系统(例如 ECC),则此过程会发生变化,但始终会检查所有权证明。
2.3、创建/交换对称会话密钥
TLS 握手的最后一部分涉及创建“会话密钥”,这是实际用于安全通信的密钥。
会话密钥是“对称的”,这意味着相同的密钥用于加密和解密。 这些密钥可以比非对称密钥更有效地实现强加密,从而适合在 HTTPS 连接中来回发送数据。
生成密钥的确切方法根据所选的密码套件而有所不同,其中两种最常见的方案是 RSA 和 Diffie-Hellman。
为了结束握手,各方让对方知道他们已经完成了所有必要的工作,然后双方都运行校验和以确保握手发生时没有任何恶意篡改或损坏。
整个 SSL 握手发生在几百毫秒内,并且全部在幕后进行。 这是 HTTPS 连接中必须发生的第一件事,甚至在网页加载之前。
SSL 握手完成后,加密且经过身份验证的 HTTPS 连接就会开始,您和服务器之间发送和接收的所有数据都会受到保护。
在 TLS 1.3 之前,每次重新访问站点时,握手都会再次发生。 TLS 1.3握手支持0 RTT,即零往返时间恢复,大大提高了回访者的速度。 此前,许多服务器为了效率和速度而实施了“恢复”过程,但 0 RTT 将其提高到 11。
3、TLS 1.2 握手过程详解
TLS 1.2 在 2008年发布,TLS 1.2 是目前使用广泛的版本。
每次 TLS 握手都涉及一系列步骤,这些步骤完成我们上面总结的三个主要任务:交换加密功能、验证 SSL 证书以及交换/生成会话密钥。
对于那些希望了解确切过程的人,以下是 TLS 1.2 握手涉及的步骤(使用 RSA - 我们在本文后面有一个 Diffie-Hellman TLS 1.2 握手的示例)。
这些步骤如下图所示,左侧是客户端,右侧是服务器。
1、第一条消息称为“ClientHello”。 此消息列出了客户端的功能,以便服务器可以选择两者用于通信的密码套件。 它还包括一个随机挑选的大素数,称为“客户端随机数”
2、服务器礼貌地回复“SeverHello”消息。 在此消息中,它告诉客户端它从提供的列表中选择了哪些连接参数,并返回自己随机选择的质数(称为“服务器随机数”)。 如果客户端和服务器不共享任何共同功能,则连接将无法成功终止。
3、在“Certificate”消息中,服务器将其 SSL 证书链(包括其叶证书和中间证书)发送给客户端。 为了向连接提供身份验证,SSL 证书由 CA 签名,这允许客户端验证证书是否合法。 收到证书后,客户端会执行多项检查来验证证书。 这包括检查证书的数字签名、验证证书链以及检查证书数据是否存在任何其他潜在问题(证书过期、域名错误等)。 客户端还将确保服务器拥有证书的私钥。 这是在密钥交换/生成过程中完成的。
4、这是一条可选消息,仅对于需要服务器提供附加数据的某些密钥交换方法 (Diffie-Hellman) 才需要。
5、“Server Hello Done”消息告诉客户端它已经发送了所有消息。
6、然后,客户端提供其对会话密钥的贡献。 此步骤的细节取决于在初始“Hello”消息中决定的密钥交换方法。 在此示例中,我们将研究 RSA,因此客户端将生成称为预主密钥的随机字节字符串,然后使用服务器的公钥对其进行加密并传输。
7、“Change Cipher Spec”消息让对方知道它已经生成了会话密钥并将切换到加密通信。
8、然后发送“Finished”消息以表明客户端的握手已完成。 Finished 消息已加密,并且是受会话密钥保护的第一个数据。 该消息包含允许各方确保握手未被篡改的数据 (MAC)。
9、现在轮到服务器做同样的事情了。 它解密预主密钥并计算会话密钥。 然后,它发送“更改密码规范”消息以指示它正在切换到加密通信。
10、服务器使用刚刚生成的对称会话密钥发送“完成”消息,它还执行相同的校验和来验证握手的完整性。
经过以上这些步骤后,SSL 握手就完成了。 双方现在都拥有会话密钥,并将开始通过加密且经过身份验证的连接进行通信(数据传输)。
此时,可以发送“应用程序”数据的第一个字节(属于双方将通信的实际服务的数据,即网站的 HTML、Javascript 等)。
通过实际抓包看TLS 1.2 的握手过程
4、TLS 1.3 握手过程详解
让我们首先看一下正在运行的 TLS 1.3 握手,然后我们将深入研究已做出的改进。 如您所见,TLS 1.3 握手时间明显短于其前身。
1、与 TLS 1.2 握手一样,客户端 Hello 消息会启动握手,但这次它包含了更多信息。 TLS 1.3 将支持的密码数量从 37 个减少到 5 个。我们稍后会详细了解这意味着什么,但在握手的上下文中,这意味着客户端可以猜测将使用什么密钥协商/交换协议 除了从它猜测的任何协议发送其密钥共享之外。
2、服务器将用自己的 Server Hello 消息进行响应,同样,服务器非常有礼貌。 与 1.2 握手一样,此时它也会发送证书。 并且,如果客户端猜对了并且两者已就相同的 AEAD 协议达成一致,则服务器会发送自己的密钥共享部分,计算会话密钥并以服务器完成消息结束。
3、现在已经拥有所有相关信息,客户端将验证 SSL 证书并使用两个密钥共享来计算自己的会话密钥副本。 完成后,它会发送自己的 Finished 消息。
5、The TLS 1.2 handshake – Diffie-Hellman Edition
之前我们介绍了 TLS 1.2 握手的 RSA 版本。 但现在我们已经了解了 DH 与 RSA 的不同之处,让我们看看基于 DH 的 TLS 1.2 握手是什么样子的。
同样,这两种方法之间有很多相似之处,但不是用一种算法来处理身份验证和密钥交换,而是对任务进行了划分。 相反,我们将使用 ECDHE 进行密钥交换,使用 ECDSA 进行身份验证。
1、与 RSA 一样,客户端以“ClientHello”消息开始,其中包含密码套件列表以及客户端随机数。
2、服务器用自己的“ServerHello”消息进行响应,其中包括其选择的密码套件和服务器随机数。
3、服务器发送其 SSL 证书,就像 RSA TLS 握手一样,客户端将运行一系列检查来验证证书是否有效,但由于 DH 本身无法验证服务器,因此需要额外的机制。
4、为了提供身份验证,服务器获取客户端和服务器的随机数以及将用于计算会话密钥的 DH 参数,并使用其私钥对其进行加密。 这起到了数字签名的作用,客户端将使用公钥来验证签名——并且服务器是密钥对的合法所有者——并用自己的 DH 参数进行响应。
5、服务器以“Server Hello Done”消息结束此往返。
6、与 RSA 不同,客户端无需使用非对称加密将预主密钥发送到服务器,而是客户端和服务器使用之前交换的 DH 参数来获得预主密钥。 然后双方使用刚刚计算出的预主密钥来相互得出会话密钥。
7、客户端发送“Change Cipher Spec”消息,通知对方切换到加密。
8、客户端发送最终的“完成”消息,表明它已经完成了握手的部分。
9、同样,服务器发送“更改密码规范”消息。
10、握手以服务器“完成”消息结束。
参考链接: https://www.thesslstore.com/blog/explaining-ssl-handshake/#comments
相关文章:

SSL/TLS 握手过程详解
SSL握手过程详解 1、SSL/TLS 历史发展2、SSL/TLS握手过程概览2.1、协商交换密码套件和参数2.2、验证一方或双方的身份2.3、创建/交换对称会话密钥 3、TLS 1.2 握手过程详解4、TLS 1.3 握手过程详解5、The TLS 1.2 handshake – Diffie-Hellman Edition 1、SSL/TLS 历史发展 可…...

B端产品经理学习-对用户进行需求挖掘
目录: 用户需求挖掘的方法 举例:汽车销售系统的用户访谈-前期准备 用户调研提纲 预约用户做访谈 用户访谈注意点 我们对于干系人做完调研之后需要对用户进行调研;在C端产品常见的用户调研方式外,对B端产品仍然适用的 用户需…...

高清网络视频监控平台的应用-城市大交通系统视联网
目 录 一、应用需求 二、系统架构设计 三、功能介绍 1.实时视频监控 2.云台控制 3.语音功能 4. 录像管理与回放 5.告警联动 6.多种显示终端呈现 (1)CS客户端 (2)web客户端 (3…...
java设计小分队01
1.开发流程: 编辑:生成.java文件编译:javac命令,生成.class文件运行:java命令 2.标识符下列那个(不)合法: 除了第一个词小写,其他词首字母大写;java标识符为…...
instant ngp win11 安装笔记
目录 训练保姆级教程: instant ngp安装参考: 编译步骤1 编译步骤2 我把编译成功的库分享到百度网盘了 训练保姆级教程: 英伟达NeRF项目Instant-ngp在Windows下的部署,以及数据集的制作(适合小白的保姆级教学)_colmap2nerf.p…...

Microsoft Word去除页面多余的换行符
大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样,虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示...

[Javaweb/LayUI/上机考试作业/开源]学生/图书/课程/仓库等管理系统六合一基础功能通用模板
展示 考试要求 给定用户表和六张图书/教师/顾客/仓库....的表(随机给每人抽选),要求实现用户登录注册,异步更新,对物品增删改查,精确/模糊查询等。 环境 tomcat 9 mysql 8 java 17 项目结构 项目类图 写前…...

完善 Golang Gin 框架的静态中间件:Gin-Static
Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架,但是生态中的 Static 中间件使用起来却一直很不顺手。 所以,我顺手改了它,然后把这个改良版开源了。 写在前面 Gin-static 的改良版,我开源在了 soulteary/gin-static&a…...
html websocket的基本使用
html websocket的基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"w…...

大数据 MapReduce是什么?
在Hadoop问世之前,其实已经有了分布式计算,只是那个时候的分布式计算都是专用的系统,只能专门处理某一类计算,比如进行大规模数据的排序。 很显然,这样的系统无法复用到其他的大数据计算场景,每一种应用都…...
ubuntu 如何放开防火墙端口,ubuntu 防火墙操作命令,ubuntu 防火墙全面操作说明
本文介绍了Ubuntu操作系统有关防火墙操作的命令。为了便于说明,请使用 root 用户或具有超级管理员权限的用户登录到 Ubuntu 系统,这样操作命令前就不需要加 sudo了。 一、安装防火墙 如果没有安装防火墙,请用如下命令安装: apt …...

计算机视觉入门与调优
大家好啊,我是董董灿。 在 CSDN 上写文章写了有一段时间了,期间不少小伙伴私信我,咨询如何自学入门AI,或者咨询一些AI算法。 90%的问题我都回复了,但有时确实因为太忙,没顾得过来。 在这个过程中&#x…...
Ndk编译hevc静态库
源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径,根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本,可以根据实际情况修改 aarch64-linux-…...

Linux系统安装MySQL
Linux系统安装MySQL 第一步:下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步:安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步:查看MySQL版本 yum repolist …...

linux go环境安装 swag
下载依赖包 go get -u github.com/swaggo/swag编译 移动到下载的swag包目录,一般在$GOPATH/pkg/mod下 查看 GOPATH echo $GOPATHcd /root/GolangProjects/pkg/mod/github.com/swaggo/swagv1.16.2go install ./cmd/swag/不出意外,$GOPATH/bin下 已经有了swag 初…...

高效分割视频:批量剪辑,轻松提取m3u8视频技巧
在数字媒体时代,视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求,经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作,既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法,批量剪辑并轻松提取…...

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程
随着移动互联网的普及,预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养,预约已经渗透到各个行业。然而,市面上的预约小程序大多功能单一,界面老旧,无法满足商家和用户的个性化需求。今天来给大…...

el-select 多选,选有一个未选择的选项
多选有未选择这个选项后。会出现一个情况,绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理,选择(未选择)就清除(其它的选择),选择(cpu)就清除(未选…...
CISSP 第6章: 密码学与对称加密算法
第六章 密码学与对称加密算法 6.1 密码学历史上的里程碑 6.1.1 凯撒密码 简单的将字母表中的每个字母替换成其后的三个字母,是单一字母的替代置换密码 6.1.2 美国内战 美国内战使用词汇替代和置换的复杂组合,从而试图破坏敌人的破译企图 6.1.3 Ultra与…...

《深入理解C++11:C++11新特性解析与应用》笔记八
第八章 融入实际应用 8.1 对齐支持 8.1.1 数据对齐 c可以通过sizeof查询数据的长度,但是没有对对齐方式有关的查询或者设定进行标准化。c11标准定义的alignof函数可以查看数据的对齐方式。 现在的计算机通常会支持许多向量指令,4组8字节的浮点数据&a…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...