SSL与TLS协议详解

article/2025/10/16 22:13:58

写在最前面的话:这篇文章是我借鉴了Eric Rescorla的《SSL and TLS》一书之后对该书的前半部分内容整合而做。如您需要开发围绕SSL、TLS的程序建议参阅原著或者RFC相关文档。

一、关于SSL、TLS与HTTPS的三两事

什么是SSL、TLS:

众所周知,真正的通信实际上是两台主机之间的进程在交换数据,而运输层作为整个网络最关键的从层次之一,扮演沿着向上层(应用层)提供通信服务的角色。想要剖析运输层的数据安全传输策略就一定无法绕开三个至关重要的协议,它们分别是HTTPS协议、SSL协议、TSL协议。SSL(Secure Sockets Layer)协议既安全套接字层协议,TLS(Transport Layer Security)协议即安全传输层协议

诞生背景:

随着网上银行和电子商务的兴起,人们需要一种技术来保障Word Wide Web(WWW)通讯的安全,而当时现有的http协议一直是明文传输。在这一背景下Netscape(网景)公司于1990年开发出了SSL(Secure Sockets Layer)安全套接字层(此时的Netscape Navigator浏览器仍统治互联网浏览器市场)。该协议的主要任务是提供数据加密、身份验证和消息完整性验证服务。此时的SSl版本号为SSL 1.0,由于多方面原因第一个版本从未发布过。第二版既SSL 2.0则于1994年发布,但是由于Netscape的开发人员闭门造车基本没有与其他业内安全专家商讨,所以存在弱点,被认为是失败的协议,最终退出了历史舞台。时间来到了1995年我们的主角SSL 3.0终于发布,虽然与早先的版本协议名称相似,但是SSl 3.0被完全重新设计,该协议的主要任务不变且设计沿用至今。HTTP作为第一个使用SSL保证安全的应用层协议,HTTP over SSL(HTTPS)应运而生,后来HTTPS在RFC2818被标准化,这一设计也就沿用至今。但SSL的进化没有停止,现如今的HTTPS实际上是HTTP over SSL/TSL,TSL实际上可以算作SSL的升级版本但是由于IETF标准化被更名为TSL(Transport Layer Security,传输层安全)。最早的TLS 1.0版本与1999年发布且与SSL 3.0没有太大区别。TLS 1.1与2006年发布,时隔多年但也只是修复了一些关键的安全问题。TLS 1.2于2008年发布,该版本添加了对已验证加密的支持,并且使协议完全弹性化,该版本被沿用至今。最新的TLS 1.3版本针对安全强化及效率提升方面进行了大量修改,相继推出了20多个草案版本并且即将完成最终的标准化,将会得到广泛的支持。

HTTPS、SSL与TLS的关系:

SSL严格意义上将SSL是介于网络层协议和应用层协议之间的一种协议层。通过与HTTP协议搭配产生了HTTPS协议,您可以理解为HTTP+SSL=HTTPS(阅读下文您将理解为什么网络专家要这么设计)。现如今SSL经过三代更新,在SSLv3.0之后正式更名为TLS1.0。也可以理解为TLS1.0实际上是SSLv3.1。

二、SSL协议详解

SSL介绍:

SSL(Secure Socket Layer)协议是一种在主机之间提供安全数据传输的协议,它具有数据加密以及身份验证的功能。传输数据在安全通道上是透明的,这说明它并不对数据进行修改或变更,数据在传输之前就完成了加密,一端发送的数据完全是另一端读取的内容。得益于透明传输,几乎所有基于TCP的协议稍加改动就可以在SSL上运行,非常便捷。

最常见SSL的工作流程:

1、整体概述

SSL的连接分为两个阶段(握手阶段和数据传输阶段),握手阶段用于对服务器进行认证并确定用于保护数据传输的加密 密钥。传输任何数据之前都必须完成握手操作,因为握手阶段完成后数据就会被分成一系列经过保护的记录进行传输。

2、握手阶段

SSL协议总共有四种握手形式:
1、Full Handshake:客户端和服务器端双方从无到有建立SSL连接,也被成为全流程握手,本文将重点介绍。
2、Resum session Handshake:客户端和服务器端曾经建立过连接,但被中断了,SSL的会话信息被保留了下来,只需 要执行部分握手流程就可建立SSL连接
3、Server Re-negotiation Handshake:客户端和服务器端已经建立了连接,但服务器端要求重新对密钥进行协商,这时只需要执行部分握手流程就可以重建连接。
4、Client Re-negotiation Handshake:客户端和服务器端已经建立连接,但客户端端要求重新协商密钥,同上只需执行部分握手流程。
本文将介绍全流程握手(并且只介绍SSL的最基本模式—使用RSA只进行服务器认证的模式),全流程握手的目的有三。
第一,客户端和服务器需要在保护数据的加密算法上达成一致。
第二,客户端和服务器需要确定加密算法的密钥。
第三(此项 可选择),服务端对客户端进行认证
整个握手流程大致如下*
在这里插入图片描述
(请注意,并非一个阶段对应一个握手消息,有可能一个阶段对应多个握手消息,本流程只是为了让读者对SSL有个初步了解):*
(1) 客户端将自己所支持的加密算法写入一个列表,并着手生成一个密钥,在该密钥产生过程中会有一个随机生成的并用作输入的随机数(请联系RSA密钥生成时所使用随机数)。客户端将该算法列表和该输入数发送给服务器端
实际
(2) 服务器在收到客户端发送的数据之后根据列表的内容选择一个自己也支持的加密算法,然后服务器会将自己用于认证服务器的标识以及一个同作为密钥产生部分输入的随机数制作成证书并将其连同自己选中的加密算法发回客户端。
(3) 客户端在收到服务器返回的数据之后先对服务器的证书进行验证并获取服务器的公钥(非对称加密中的公钥)。然后再生成一个名为pre_master_secret的随机密码串并使用服务器的公钥进行加密,之后将其发送给服务端。
(4) 服务器在收到master_secert之后用自己的私钥进行解密,在获得了双方的随机数之后服务端和客户端都会计算出加密和MAC密钥。这一步在安全传输中的作用举足轻重,但是在握手流程中不进行详细的解释,会在下文进行详细的补充。
(5) 客户端将本次所有握手消息的MAC值发送给服务端
(6) 服务器同将本次所有握手消息的MAC值发送给客户端
经过该握手阶段客户端和服务端确定了要使用的加密算法(第一步、第二部)并确定了加密密钥(第三步、第四步)。第五步和第六步用来防止握手本身遭到中间人攻击(篡改)。

实际的全流程握手消息
(1) 第一步只有一条单一的握手消息ClientHello。
(2) 第二步对应四条握手消息,也就是说服务器端向客户端回复了三条消息。他们分别是:
第一条:Server Hello消息,包含服务器选择的算法以及上文提到的随机数。
第二条:Service Certificate消息,包含服务器的公钥(一般情况下是RSA)的证书。
第三条:Client Certificate Requst消息,服务器端索要客户端证书/公钥。
第四条:Server Hello Done消息,表示握手阶段完成。需要这个消息的原因是SSL的诸多变种版本会在第二步发送不只三条握手消息,所以需要一个消息告诉客户端本次握手消息发送完毕。
(3) 第三步包含一条消息,ClientKeyExchange消息,其中包含了一个随机产生的服务器RSA密钥加密的密钥。

(4) 第四步客户端与服务器端并不发送消息,双方根据pre_master_secret以及双方的随机数各自计算出加密和MAC密钥。
(5) 第五步包含客户端向服务器端发送的两条握手消息。它们分别是:

第一条:ChangeCipherSpec 消息,其表示了记录加密及认证的改变。当双方确定了一组新的密钥,就发送该消息,表示开启新的密钥。
第二条:Finished消息,这个消息表示本次握手传输完成。Finished消息用于校验各个握手阶段。

(6) 第六步:
第一条:ChangeCipherSpec消息,服务器端也需要发送确认开启新的密钥的消息。
第二条:Finished消息,校验握手阶段结束。

3、数据传输阶段

建立了连接之后SSl的数据传输是通过SSL记录协议进行数据传输的。与TCP协议大同小异,SSL记录协议将数据流进行分割,得到一系列的片段之后加以传输。值得一提的是SSL对每一个片段都采用了独立的保护机制,在接收方需要对收到的每一条数据都进行解密和验证。
对数据的完整性保护是通过在数据片段中插入MAC实现的,MAC附加到数据片段的尾部,在接收方实现验证。
对数据的加密是整段进行的,整一个数据片段(连同MAC)都要进行加密处理,在接收端进行解密。
对于pre_master_secert的(握手流程第四步)补充说明:在pre_master_secert交换完毕之后,服务器端和客户端都需要将其扩展成独特的加密密钥来实现加密和认证等任务。这种扩展需要使用一种密钥导出函数来实现(值得一提的是SSLv3和TLS的导出函数相似但是具体变换各有不同)。具体过程就是客户端/服务器端双方在收到pre_master_secert后将其和自己的随机数合并生成master_secert,通过master_secert和随机数的配合又生成了各自的密钥分组,并将密钥分组应用到了之后的通讯过程中。
在这里插入图片描述

4、警示协议和关闭协议

设计警示协议的目的是一方可以向另一方报告例外情况,警示协议包含突发情况的严重程度和相应的描述。警示分为警告(warning)和致命(fatal)两种等级。fatal警示会终止连接,warning会继续执行。警示的种类非常多,本文只介绍连接关闭警示。
当客户端想要关闭连接的时候会使用close_notify警告来表示即将关闭连接,随后再发送一条包含TCP FIN的消息。服务器端会在接收到这两条消息后回复自己的TCP FIN消息,这样就表示它关闭了连接并不再发送任何数据。(对于到底是谁发送close_notify报警,SSL规范并没有叙述详细,但是理论上通讯双方都可以发送)

三、TLS详解

1、TLS的工作流程

上文已经多次提到TLS的设计原理与SSLv3相同(握手流程及数据传输流程相同)二者最明显的区别就是它们所支持的加密算法不同,这也造成了TLS和SSLv3不可相互操作。
TLS和SSL的具体差异如下:
MAC算法不同:TLS使用基于异或运算的HMAC算法,在不改变安全程度的情况下优化了效率。
报警报文不同:在基于SSL支持的报警报文上TLS补充了很多报警报文(如未知CA、记录溢出、拒绝访问、解密失败等)。
密文组和客户端证书不同:TLS不支持Fortezza密钥交换、加密算法和客户证书。
握手消息部分不同:certificate_verify和finished消息计算输入时存在少许差别。
Master_secret的计算方式不同
对数据的填充规格不同:对于长度达不到数据字段要求的数据,SSLv3要求填充后其长度要达到密文块长度的最小整数倍。而TLS可以是任意整数倍(有效对抗攻击者对报文长度的分析)。


http://chatgpt.dhexx.cn/article/GcuwsMIu.shtml

相关文章

TLS协议/SSL协议

历史背景 SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入&#xf…

TLS加密体系

谈到这个词,可能大家的第一印象就是加密,而对TLS了解甚少。那么在介绍 TLS 加密体系之前先来讲一讲加密。 一提到加密,可能很多人脑海中会浮现出电视剧里特务的场景,他们拿出一台电报机,“滴滴滴滴”按下情报报文&…

TLS概述

握手过程 可分为5步(使用Diffie – Hellman算法): 第一步,浏览器给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。 第二步,服务器确认双方使用的…

SSL与DTLS简介

目录 SSL简介 DTLS-基于UDP的TLS 记录层 传输层映射 早期我们在访问web时使用HTTP协议,该协议在传输数据时使用明文传输,会带来了以下风险: 信息窃听风险,第三方可以获取通信内容; 信息篡改风险,第三方…

TLS/SSL 协议

TLS/SSL 协议的工作原理 TLS/SSL 协议的工作原理 • 身份验证 • 保密性 • 完整 TLS/SSL 发展 TLS 协议 • Record 记录协议 • 对称加密 • Handshake 握手协议 • 验证通讯双方的身份 • 交换加解密的安全套件 • 协商加密参 TLS 安全密码套件解 对称加密的工作原理&am…

SSL/TLS详解

SSL/TLS详解 1. 前言 ​ 我们都知道Https就是加密协议中采用了SSL/TLS协议,这是面试常客,如果被问到了,你懂的越多,答得越深,你的面评相应来说也就会越高,对于SSL/TLS,我们不仅仅要知道其为数…

TLS协议简单介绍

TLS简介 介绍 TLS(Transport Layer Security)即安全传输层协议,在两个通信应用程序之间提供保密性和数据完整性。最典型的应用就是HTTPS。HTTPS,即HTTP over TLS,就是安全的HTTP,运行在HTTP层之下&#x…

esp-idf的内存管理——tlsf之上的封装

目录 1 为什么要封装2 先看结构2.1 multi heapnote1note2 2.2 heap caps2.3 层次关系 3 再看接口3.1 内存的申请3.2 内存的释放3.2 堆完整性检测3.3 其它 参考 1 为什么要封装 封装通常会降低效率,但能够带来诸如通用性提升等好处,idf在tlsf的基础上增加…

SSL/TLS 证书管理

SSL 证书发现 随着组织的 IT 基础架构的扩展,他们为每台计算机获取证书以保护其资源和域。此外,开发人员通常会创建许多自签名证书,以便在产品的开发阶段保护内部网络。组织通常最终会拥有数千个证书。自动发现证书提供了对证书基础结构的完…

TLS协议。

IPSec通过安全关联实现IP分组安全关联两端之间的安全传输过程,TLS通过建立安全连接实现数据在两个应用进程之间的安全传输过程。TLS建立安全连接时,实现安全连接两端应用进程之间的双向身份鉴别过程,保证经过安全连接传输的数据的保密性和完整…

SSL/TLS协议

SSL/TLS协议 文章目录 SSL/TLS协议1 协议历史2 协议的目标3 SSL体系结构4 两个主要的协议5 SSL的两个重要概念6 会话状态参数7 连接状态参数8 SSL Record Protocol9 SSL记录协议中的操作10 SSL握手协议使用的消息11 SSL握手协议的流程 1 协议历史 1994年Netscape开发了SSL(Sec…

tls协议

tls 前言一、TLS 协议的组成二、ECDHE1.连接过程 三、TLS1.31.过程 前言 tls是ssl协议的标准化,处于应用层(5层架构)和会话层(OSI),有着rsa方式和ecdhe两种, 一、TLS 协议的组成 握手协议:负责在客户端和服务器之间协商决定密码算…

TLS协议详解!

TLS简介 SSL 即安全套接字层,它在 OSI 七层网络模型中处于第五层,SSL 在 1999 年被 IETF(互联网工程组)更名为 TLS ,即传输安全层,直到现在,TLS 一共出现过三个版本,1.1、1.2 和 1.3 ,目前最广…

esp-idf的内存管理——tlsf算法

目录 1 最初还不是tlsf2 为什么要引入tlsf3 tlsf算法概览4 idf中使用的tlsf算法的设计与实现4.1 先看结构4.1.1 管理内存块的结构4.1.2 管理tlsf堆的结构 4.2 优化内存块的元数据开销4.3 一二级位图索引的计算4.4 tlsf堆的创建与销毁4.4.1 tlsf堆的创建4.4.2 tlsf堆的销毁 4.5 …

TLSF算法1:二级索引的计算

TLSF算法1:二级索引的计算 一、什么是TLSF算法二,f的确定三、s的确定四、实验结果一、什么是TLSF算法 在嵌入式系统中,内存需要在分配和释放时有一个确定的相应时间,才能进一步分析其实时任务的可调度性。因此TLSF算法是一个十分适用嵌入式领域的动态内存分配算法。在关于T…

TLSF 内存分配算法详解

文章目录 1. DSA 背景介绍1.1 mmheap1.2 mmblk 2. TLSF 原理2.1 存储结构2.2 内存池初始化2.3 free2.4 malloc 参考资料 1. DSA 背景介绍 动态内存管理算法 DSA,Dynamic storage allocation。RTOS 一般情况下动态内存使用malloc申请分配,但是存在两个缺…

tlsf算法-概念、原理、内存碎片问题分析

文章目录 一、tlsf算法介绍二、tlsf代码分析2.1 mapping_search2.2 search_suitable_block 三、参考链接 一、tlsf算法介绍 tlsf(全称Two-Level Segregated Fit,内存两级分割策略算法),第一级(first level&#xff0c…

数学建模系列-优化模型(三)---排队论模型

所谓排队论模型,就是指一个模型中可根据交易简单的需要分为三个部分: (1)顾客造访 (2)服务顾客时间 (3)若不空闲,则顾客需要排队 下面是对于排队论模型的建模以及解决方法…

无线传感器网络:排队论(Queueing Theory)模型

文章目录 The arrival ProcessQueueing SystemThe M/M/1 queueThe M/M/1/N queue References 排队理论已被用于评估通信网络的性能很多年了。早在1917年,丹麦数学家 Erlang 就将该理论用于电话交换机的设计,并开创了现在著名的 Erlang-B 和 Erlang-C 公式…

排队论(Queuing theory)简介

Preliminary Questions 1.What does affect the performance of ——a computer system? ——a computer network? ——an Internet service? 2 How do we measure the performance of ——a computer system? ——a computer network? ——an Internet service…