【计网】SSL/TLS核心原理

序言

在HTTP协议中,信息是明文传输的,因此为了通信安全就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)协议。HTTPS也是一种超文本传送协议,在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务端的身份,并为浏览器和服务端之间的通信加密。HTTPS是一种通过计算机网络进行安全通信的传输协议,使用HTTP进行通信,借助SSL/TLS建立安全通道和加密数据包。使用HTTPS的主要目的是提供对网站服务端的身份认证,同时保护交换数据的隐私与完整性。TLS是传输层加密协议,前身是SSL协议,由网景(Netscape)公司1995年发布,有时候TLS和SSL两者不做太多区分。

SSL/TLS协议的版本演进

TCP是传输层的协议,但是它是明文传输的,是不安全的。SSL的诞生给TCP加了一层保险,为TCP通信提供安全及数据完整性保护。TLS只是SSL的升级版,它们的作用是一样的。TLS(Transport Layer Security,传输层安全协议)由两层组成:TLS记录(TLS Record)和TLS握手(TLS Handshake)。TLS协议是更新、更安全的SSL协议版本。SSL/TLS可以理解为安全传输层协议不同发展阶段的版本。1999年,SSL应用广泛,已经成为互联网上的事实标准。IETF(Internet Engineering Task Force,国际互联网工程任务组)在1999年把SSL标准化。完成标准化之后,SSL协议名称被改为TLS。SSL/TLS位于应用层和传输层之间,除了HTTP外,它可以为任何基于TCP传输层以上的应用层协议(如WebSocket协议)提供安全性保证。理论上,SSL/TLS协议属于传输层。从理论模型的维度来说,该协议在TCP/IP协议栈的分层结构中所处的层次位置大致如图12-1所示。但是,在具体的编码实现上,SSL/TLS协议属于应用层。从实现的维度来说,该协议在TCP/IP协议栈分层结构中所处的层次位置大致如图

在这里插入图片描述
综合起来可以表述为:SSL/TLS协议理论上属于传输层,却实现于应用层。

在客户端浏览器中,目前应用最广泛的是SSL 3.0、TLS 1.0(有时被标为SSL 3.1)​、TLS 1.1(有时被标为SSL3.2)​、TLS 1.2(有时被标为SSL 3.3)四个版本的协议。比如,在IE浏览器上,用户可以设置是否使用SSL/TLS协议,还可以设置支持哪一些版本的协议,具体如图

在这里插入图片描述
在这里插入图片描述

SSL/TLS协议的分层结构

SSL/TLS协议包括握手协议(Handshake Protocol)、密码变化协议(SSL Change Cipher Spec Protocol)、警告协议(Alert Protocol)、记录协议(Record Protocol)。

(1)握手协议:SSL/TLS协议非常重要的组成部分,用来协商通信过程中使用的加密套件(加密算法、密钥交换算法和MAC算法等)​、在服务端和客户端之间安全地交换密钥、实现服务端和客户端的身份验证。

(2)密码变化协议:客户端和服务端通过密码变化协议通知对端,随后的报文都将使用新协商的加密套件和密钥进行保护和传输。

(3)警告协议:用来向对端发送告警信息,消息中包含告警的严重级别和描述。

(4)应用数据协议:负责将SSL/TLS承载的应用数据传达给通信对端。

(5)记录协议:主要负责对上层的数据(SSL/TLS握手协议、SSL/TLS密码变化协议、SSL/TLS警告协议和应用数据协议)进行分块计算、添加MAC值、加密等处理,并把处理后的记录块传输给对端。

在这里插入图片描述

SSL/TLS协议主要分为两层(上层的是握手协议、密码变化协议、警告协议和应用数据协议,下层的是记录协议)​,主要负责使用对称密码对消息进行加密。其中,握手协议(Handshake Protocol)是SSL/TSL通信中最复杂的子协议,也是安全通信所涉及的第一个子协议。

SSL/TLS运行过程

SSL/TLS协议实现通信安全的基本思路是:消息发送之前,发送方A先向接收方B申请公钥,发送方A采用公钥加密法对发出去的通信内容进行加密,接收方B收到密文后,用自己的私钥对通信密文进行解密。

(1)客户端向服务端索要并验证公钥。(公钥加密,私钥解密验证)
(2)双方协商生成“对话密钥”​。
(3)双方采用“对话密钥”进行加密通信。

前两步又称为“握手阶段”​,每一个TLS连接都会以握手开始。​“握手阶段”涉及四次通信,并且所有通信都是明文的。在握手过程中,客户端和服务端将进行以下四个主要阶段:

(1)交换各自支持的加密套件和参数,经过协商后,双方就加密套件和参数达成一致。
(2)验证对方(主要指服务端)的证书,或使用其他方式进行服务端身份验证。
(3)对将用于保护会话的共享主密钥达成一致。
(4)验证握手消息是否被第三方修改。

SSL/TLS第一阶段握手

客户端与服务端通过TCP三次握手建立传输层连接后,通信双方需要交换各自支持的加密套件和参数,经过协商后,使通信双方的加密套件和参数达成一致。

SSL/TLS“握手”第一个阶段的工作为:由客户端发一个Client Hello报文给服务端,并且第一个阶段只有这一个数据帧(报文)​。Client Hello数据帧的内容大致包括以下信息:

(1)客户端支持的SSL/TLS协议版本,比如TLS 1.2版。
(2)一个客户端生成的随机数,这是握手过程中的第一个随机数,称之为Random_C。
(3)客户端支持的签名算法、加密方法、摘要算法(比如RSA公钥签名算法)​。
(4)客户端支持的压缩方法。

SSL/TLS第二阶段握手

SSL/TLS握手第二个阶段的工作为:服务端对客户端的Client Hello请求进行响应。在收到客户端请求(ClientHello)后,服务端向客户端发出回应,这个阶段的服务端回应帧(报文)一般包含4个回复帧:Server Hello帧、Certificate帧、Server Key Exchange帧、Server Hello Done帧。

Server Hello帧

服务端回复的Server Hello帧主要包含以下内容:
(1)回复服务端使用的加密通信协议版本,比如TLS 1.2版本。
(2)一个服务端生成的随机数,是整个握手过程中的第二个随机数,记为“Random_S”​,稍后用于生成“对话密钥”​。
(3)确认使用的加密方法,比如RSA公钥加密。
(4)服务端的证书。

Certificate帧

Certificate帧用于返回服务端证书,该证书中含有服务端的证书清单(包括服务端公钥)​,用于身份验证和密钥协商。在多数电子商务应用中,客户端都需要进行服务端身份验证,服务端通过Certificate帧发送自己的证书给客户端。

服务端通过Certificate帧给客户端提供身份信息,那么客户端是否需要提供自己的身份证书给服务端呢?

虽然大部分场景中服务端不需要验证客户端的身份,但是只要服务端需要验证客户端的身份,服务端就会发一个CertificateRequest证书请求给客户端。比如,在一些安全性要求较高的机构(如金融机构)往往需要验证客户端身份证书,这些机构只允许通过认证客户连入自己的网络,并且会给正式客户提供USB密钥,里面就包含了一张客户端身份证书,在通信握手时要求客户端提供证书。

Server Key Exchange帧

Server Key Exchange帧的目的是携带密钥交换的额外数据,其消息内容对于不同的协商算法套件都会存在差异。

在某些场景中,服务端不需要发送Server Key Exchange握手消息。如果在Server Hello消息中使用DHE/ECDHE非对称密钥协商算法来进行SSL握手,就将发送该类型握手消息。对于使用RSA算法的SSL握手,不会发送该类型握手消息。另外,使用DH、ECDH算法进行握手时也不会发送该类型握手消息。

Server Hello Done帧

Server Hello Done帧是第二阶段的最后一帧,标记服务端对客户端的Client Hello请求帧的所有响应报文发送完毕,Server Hello Done帧的长度为0。

客户端收到服务端证书后,进行验证,如果证书不是可信机构颁发的,或者域名不一致,或者证书已经过期,那么客户端会进行警告;如果证书没有问题,就继续进行通信。

SSL/TLS第三阶段握手

SSL/TLS握手(Handshake)第三个阶段的工作为:客户端进行回应。在这个阶段,客户端会发送Client KeyExchange、Change Cipher Spec、Encrypted Handshake三个数据帧。

客户端收到第二个阶段的服务端回应报文以后,首先验证服务端证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务端的公钥,然后向服务端发送三项信息:

(1)一个随机数。该随机数用服务端公钥加密,防止被第三方窃听。

此随机数是整个握手阶段出现的第三个随机数,又称Pre-master key。有了它以后,客户端和服务端就同时有了三个随机数,接着双方用事先商定的加密方法各自生成本次会话所用的同一把“会话密钥”​。

(2)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥加密后发送。

(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的哈希值,用来供服务端校验。

服务端的证书信息会包含Public Key(公钥)​,稍后客户端进行证书验证(身份验证)的流程大致为:Client随机生成一串数,然后用Server发送的Public Key加密(RSA算法)后发给Server;而Server会用其对应的Private key(私钥)解密后再返回给Client; Client将其与原文比较,如果一致,则说明Server拥有Private key,与自己通信的对端Server正是证书的拥有者,因为Public key加密的数据只有Private key才能解密。在实际通信过程中,这个认证过程会复杂很多,包含多次哈希、伪随机等复杂运算。

SSL/TLS第四阶段握手

SSL/TLS握手(Handshake)第四个阶段的工作为:服务端进行最后的回应。在收到客户端的第三个随机数Pre-master key之后,服务端计算并生成本次会话所用的“会话密钥”​,然后向客户端最后发送下面的数据帧:

(1)Change Cipher Spec帧:此帧为服务端的编码改变通知报文。
(2)Encrypted Handshake Message帧:此帧为服务端的握手结束通知报文。

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

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

相关文章

Web Components 开发与集成

以下是关于 Web Components 开发与集成 的系统知识梳理,涵盖核心概念、高级特性、集成与优化等内容: 一、Web Components 核心概念 技术作用核心 APICustom Elements定义可复用的自定义 HTML 元素customElements.define()、生命周期钩子(connectedCallback 等)Shadow DOM封…

day26 学习笔记

文章目录 前言一、图像颜色转换1.HSV颜色空间2.颜色转换 二、灰度化1.最大值法2.平均值法3.加权均值法 三、二值化1.全局阈值法1.阈值法(THRESH_BINARY)2.反阈值法(THRESH_BINARY_INV)3.截断阈值法(THRESH_TRUNC)4.低阈值零处理(THRESH_TOZERO)5.超阈值零处理(THRESH_TOZERO_IN…

威锋VL822-Q7T10GHUB芯片适用于扩展坞显示器

一、概述 VL822-Q7T是VIA Lab(威盛电子旗下专注于USB相关技术研发的子公司)精心打造的一款高性能USB 3.1 Gen2集线器控制器芯片。在当今数字化时代,USB接口作为设备连接与数据传输的核心通道,其性能与稳定性至关重要。VL822-Q7T凭…

华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《最小的调…

关于 Spring Boot 微服务解决方案的对比,并以 Spring Cloud Alibaba 为例,详细说明其核心组件的使用方式、配置及代码示例

以下是关于 Spring Boot 微服务解决方案的对比,并以 Spring Cloud Alibaba 为例,详细说明其核心组件的使用方式、配置及代码示例: 关于 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案! https://sca.aliyun.com/?spm7145af80…

常见的爬虫算法

1.base64加密 base64是什么 Base64编码,是由64个字符组成编码集:26个大写字母AZ,26个小写字母az,10个数字0~9,符号“”与符号“/”。Base64编码的基本思路是将原始数据的三个字节拆分转化为四个字节,然后…

B树、红黑树、B+树和平衡二叉树(如AVL树)的区别

B树、红黑树、B树和平衡二叉树(如AVL树)的区别及优缺点的总结: 1. 平衡二叉树(AVL树) 结构:二叉搜索树,每个节点的左右子树高度差不超过1。平衡方式:通过旋转(左旋/右旋…

Python Cookbook-6.5 继承的替代方案——自动托管

任务 你需要从某个类或者类型继承,但是需要对继承做一些调整。比如,需要选择性地隐藏某些基类的方法,而继承并不能做到这一点。 解决方案 继承是很方便的,但它并不是万用良药。比如,它无法让你隐藏基类的方法或者属…

长短期记忆网络:从理论到创新应用的深度剖析

一、引言 1.1 研究背景 深度学习在人工智能领域的发展可谓突飞猛进,而长短期记忆网络(LSTM)在其中占据着至关重要的地位。随着数据量的不断增长和对时序数据处理需求的增加,传统的神经网络在处理长序列数据时面临着梯度消失和梯…

vue3.2 + element-plus 实现跟随input输入框的弹框,弹框里可以分组或tab形式显示选项

效果 基础用法&#xff08;分组选项&#xff09; 高级用法&#xff08;带Tab栏&#xff09; <!-- 弹窗跟随通用组件 SmartSelector.vue --> <!-- 弹窗跟随通用组件 --> <template><div class"smart-selector-container"><el-popove…

C语言中冒泡排序和快速排序的区别

冒泡排序和快速排序都是常见的排序算法&#xff0c;但它们在原理、效率和应用场景等方面存在显著区别。以下是两者的详细对比&#xff1a; 一、算法原理 1. 冒泡排序 原理&#xff1a;通过重复遍历数组&#xff0c;比较相邻元素的大小&#xff0c;并在必要时交换它们的位置。…

软件信息安全性测试如何进行?有哪些注意事项?

随着信息技术的高速发展&#xff0c;软件已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着软件产品的广泛普及&#xff0c;软件信息安全性问题也日益凸显&#xff0c;因此软件信息安全性测试必不可少。那么软件信息安全性测试应如何进行呢?在进行过程中又有哪…

springboot集成mybaits-generator自动生成代码

文章目录 概述创建springboot项目pom文件aplication.yml代码生成类mybatis-plus提供的变量controller模板mapper模板总结 概述 创建springboot项目&#xff0c;在这里使用的是springboot 2.6.13版本&#xff0c;引入的项目依赖包如pom文件所写&#xff0c;jdk使用1.8&#xff…

数据库脱裤

假设你已经getshell 找到mysql账号密码。 网站要连接mysql&#xff0c;就需要把mysql的账号密码保存在一个php文件中&#xff0c;类似config.php、common.inc.php等&#xff0c;在shell中&#xff0c;读取这些文件&#xff0c;找到其中信息即可 下面是一些常见平台的配置文…

leetcode 337. House Robber III

用动态规划的思想解决这道题。 对于每一个节点&#xff0c;只有两种可能&#xff0c;偷或者不偷。 对于一颗以root为根节点的二叉树&#xff0c;定义rob表示偷root节点能从这棵二叉树偷到的最大金额。定义notrob表示不偷root节点能从这棵二叉树偷到的最大金额。 递推公式分析…

ES和MySQL概念对比

基本概念 ES和MySQL都属于数据库&#xff0c;不过各有各的特性&#xff0c;大致使用方法与MySQL类似并无区别。 MySQL&#xff1a;擅长事务持有ACID的特性&#xff0c;确保数据的一致性和安全。 ES&#xff1a;持有倒排索引&#xff0c;适合海量数据搜索和分析。 ES和MySQL如何…

【python】针对Selenium中弹框信息无法定位的问题,以下是综合解决方案及注意事项:

一、常见原因分析 1.1 弹窗类型不匹配 若弹窗为alert&#xff0c;需使用driver.switch_to.alert处理&#xff1b; 若为confirm或prompt&#xff0c;同样适用该方法。 1.2 窗口句柄切换问题 新窗口或弹窗可能开启新句柄&#xff0c;需先通过driver.window_handles切换到对应句…

欧拉服务器操作系统安装MySQL

1. 安装MySQL服务器​​ 1. 更新仓库缓存 sudo dnf makecache2. 安装MySQL sudo dnf install mysql-server2. 初始化数据库​ sudo mysqld --initialize --usermysql3. 启动数据库服务 # 启动服务 sudo systemctl start mysqld# 设置开机自启 sudo systemctl enable mysql…

SQLark:一款国产免费数据库开发和管理工具

SQLark&#xff08;百灵连接&#xff09;是一款面向信创应用开发者的数据库开发和管理工具&#xff0c;用于快速查询、创建和管理不同类型的数据库系统&#xff0c;目前可以支持达梦数据库、Oracle 以及 MySQL。 对象管理 SQLark 支持丰富的数据库对象管理功能&#xff0c;包括…

Spring Boot 中的自动配置原理

2025/4/6 向全栈工程师迈进&#xff01; 一、自动配置 所谓的自动配置原理就是遵循约定大约配置的原则&#xff0c;在boot工程程序启动后&#xff0c;起步依赖中的一些bean对象会自动的注入到IOC容器中。 在讲解Spring Boot 中bean对象的管理的时候&#xff0c;我们注入bean对…