SSL与DTLS简介

article/2025/10/16 22:18:35

目录

SSL简介

DTLS-基于UDP的TLS

记录层

传输层映射


早期我们在访问web时使用HTTP协议,该协议在传输数据时使用明文传输,会带来了以下风险:

  • 信息窃听风险,第三方可以获取通信内容;

  • 信息篡改风险,第三方可以篡改通信内容;

  • 身份冒充风险,第三方可以冒充他人身份参与通信;

为了解决明文传输所带来的风险,网景公司在1994年设计了SSL(安全套接层,Secure Socket Layer)用于Web的安全传输协议。IETF将SSL进行标准化,1999年公布了第一版TLS(传输层安全,Transport Layer Security)标准。随后又公布了 RFC 5246(2008年8月)与 RFC 6176 (2011年3月),该协议在web中被广泛应用。为互联网通信,提供安全及数据完整性保障。

  • 隐秘性,所有通信都通过加密后进行传播;

  • 身份认证,通过证书进行认证;

  • 可靠性,通过校验数据完整性维护一个可靠的安全连接;

 

SSL简介

首先我们来看一下SSLv3/TLS协议在TCP/IP协议栈中的位置:通常我们认为SSLv3/TLS处于传输层和应用层之间。

 

 

SSLv3/TLS通常又分为握手层和记录层:

  • Record Layer:为每条信息提供一个header和在尾部生成一个从Message Authentication Code (MAC) 得到的hash值,其中header由5 bytes组成,分别是:

    • 协议说明(1bytes)

    • 协议版本(2bytes)

    • 长度(2bytes)

    • 跟在header后面的协议信息长度不得超过16384bytes。

  • Handshake Protocol:开始一个安全连接握手。

 

经过TCP三次握手建立连接后,才开始TLS的握手:

  • ClientHello:Client端将自己的TLS协议版本,随机数,加密套件,压缩方法,随机数,SessionID(未填充)发送给Server端;

    //RFC 中Random的定义      

struct
{uint32 gmt_unix_time; //格林威治时间opaque random_bytes[28];
} Random;

    //RFC 中Client Hello的定义

struct {ProtocolVersion client_version;Random random;SessionID session_id;CipherSuite cipher_suites<2..2^16-1>;CompressionMethod compression_methods<1..2^8-1>;
} ClientHello;
  • ServerHello:Server端将选择后的SSL协议版本,压缩算法,密码套件,填充SessionID,生成的随机数等信息发送给Client端

  • ServerCertificates:Server端将自己的数字证书(包含公钥),发送给Client端。(证书需要从数字证书认证机构(CA)申请,证书是对于服务端的一种认证),若要进行更为安全的数据通信,Server端还可以向Client端发送Cerficate Request来要去客户端发送对方的证书进行合法性的认证。

  • ServerHelloDone:当完成ServerHello后,Server端会发送Server Hello Done的消息给客户端,表示ServerHello 结束了。

  • ClientKeyExchage:当Client端收到Server端的证书等信息后,会先对服务端的证书进行检查,检查证书的完整性以及证书跟服务端域名是否吻合,然后使用加密算法生成一个PreMaster Secret,并通过Server端的公钥进行加密,然后发送给Server端。

  • ClientFinishd:Client端会发送一个ChangeCipherSpec(一种协议,数据只有一字节),用于告知Server端已经切换到之前协商好的加密套件的状态,准备使用之前协商好的加密套件加密数据并进行传输了。然后使用Master Secret(通过两个随机数、PreMaster Secret和加密算法计算得出)加密一段Finish的数据传送给服务端,此数据是为了在正式传输应用数据之前对刚刚握手建立起来的加解密通道进行验证。

  • Server Finishd:Sever端在接收到Client端传过来的加密数据后,使用私钥对这段加密数据进行解密,并对数据进行验证,然后会给客户端发送一个ChangeCipherSpec,告知客户端已经切换到协商过的加密套件状态,准备使用加密套件加密数据并传输了。之后,服务端也会使用Master Secret加密一段Finish消息发送给客户端,以验证之前通过握手建立起来的加解密通道是否成功。

根据之前的握手信息,如果客户端和服务端都能对Finish信息进行正常加解密且消息正确的被验证,则说明握手通道已经建立成功。

接下来,双方所有的通信数据都通过Master Secret进行加密后传输。    

 

DTLS-基于UDP的TLS

SSL/TLS协议并不能用于UDP协议,而UDP也有安全传输的需求,于是产生了DTLS协议(Datagram TLS)。

DTLS协议在UDP提供的socket之上实现了客户机与服务器双方的握手连接,并且在握手过程中通过使用PSK或ECC实现了加密,并且利用cookie验证机制和证书实现了通信双方的身份认证,并且用在报文段头部加上序号,缓存乱序到达的报文段和重传机制实现了可靠传送。

记录层

同TLS1.1非常相似。唯一的改变是在记录中包含了显式序列号,显式序列号允许接收方正确验证TLS MAC。DTLS记录格式如下所示: 

struct { ContentType type; ProtocolVersion version; uint16 epoch; // New field uint48 sequence_number; // New field uint16 length; opaque fragment[DTLSPlaintext.length]; 
}DTLSPlaintext; 
  • version:DTLS1.0中,version值为{254,255}。该值是DTLS1.0的版本号的补数。这样,就最大化了TLS和DTLS之间的版本号,能很好的区分协议的不同版本。

  • epoch:一个计数值。epoch初始值为0,随着每次发出ChangeCipherSpec消息而递增。为了保证任意给定的 sequence/epoch 对都是唯一的 

  • sequence_number:该记录的序列号。 使用显式而不是隐式序列号。同TLS相同,每次发送ChangeCipherSpec消息之后,序列号置0。

  • length:同TLS1.1中的相同。length值不能超过2^14。 

 

传输层映射

每个DTLS记录必须在一个单独的数据报文内。为了避免IP分片,DTLS实现必须检测MTU,发送比MTU小的记录。DTLS实现必须提供一个方法俩检测PMTU(或者最大的应用程序数据包值,即是DTLS载荷的最大值)的值。如果应用程序试图发送一个长度超过MTU的的记录,DTLS实现应该能够产生一个错误,避免该数据包被分片。 

多个DTLS记录可能被放置在一个数据报之内。他们简单的被连续编码,DTLS记录桢能够确定他们之间的边界。注意,数据报载荷的首个字节必须在记录的开始。记录不能越过数据报。

使用epoch+sequence_number(64bit)作为序列号计算MAC值;若MAC出错,只是简单丢弃出错包并继续维持连接(TLS中会关闭连接)。

使用序列号来提供重放攻击保护,序列号的验证需要采用滑动窗口(最小的滑动窗口大小为32,但是64是首选,初始化的时候设置成64)机制来实现。

DTLS修改了TLS1.1的协商报头: 

struct {HandshakeType msg_type;uint24 length;uint16 message_seq;  // New fielduint24 fragment_offset; // New fielduint24 fragment_length; // New fieldselect (HandshakeType) {case hello_request: HelloRequest;case client_hello:  ClientHello;case hello_verify_request: HelloVerifyRequest;  // New typecase server_hello:  ServerHello;case certificate:Certificate;case server_key_exchange: ServerKeyExchange;case certificate_request: CertificateRequest;case server_hello_done:ServerHelloDone;case certificate_verify:  CertificateVerify;case client_key_exchange: ClientKeyExchange;case finished:Finished;} body;
} Handshake;

 

协商流程划分成不同的阶段,每个阶段都有超时和重传机制。超时重传机制采样状态机,其有三个基础状态:

  • 准备状态:在准备状态,为下一步的计算阶段做必要的准备,如初始化缓冲区。

  • 发送状态:在发送状态,传输并且缓存消息,一旦握手过程中的最后一个阶段的消息发送成功,就进入结束状态。如果希望接收更过的消息,就设置重传时间并且进入等待状态。

  • 等待状态:有三种退出等待状态的方式。

    • 重传定时器到期。进入发送状态;重新传输发送本阶段的消息,重新设置重传定时器,并且返回等待状态。

    • 接收到了对方发送的重传阶段消息。进入发送状态,重新传输发送本阶段的消息,重新设置重传定时器,并且返回等待状态。这里因为对方的定时器超时了,建议重新发送。

    • 接收到了希望接收的下一个阶段的消息。如果这是最后一个阶段的消息,则进入到结束状态。如果需要发送下一个阶段的消息,则进入到准备状态。

定时器的值初始时设为1秒,每次重传就加倍,直到不超过最大值60秒。应当保存当前的定时器的值直到丢包,因为这个时候会重新设置定时器的值。重新协商时,当大量数据传输完之后,将定时器的值设置成初始值。

 


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

相关文章

TLS/SSL 协议

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

SSL/TLS详解

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

TLS协议简单介绍

TLS简介 介绍 TLS&#xff08;Transport Layer Security&#xff09;即安全传输层协议&#xff0c;在两个通信应用程序之间提供保密性和数据完整性。最典型的应用就是HTTPS。HTTPS&#xff0c;即HTTP over TLS&#xff0c;就是安全的HTTP&#xff0c;运行在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 为什么要封装 封装通常会降低效率&#xff0c;但能够带来诸如通用性提升等好处&#xff0c;idf在tlsf的基础上增加…

SSL/TLS 证书管理

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

TLS协议。

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

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协议的标准化&#xff0c;处于应用层(5层架构)和会话层(OSI)&#xff0c;有着rsa方式和ecdhe两种&#xff0c; 一、TLS 协议的组成 握手协议&#xff1a;负责在客户端和服务器之间协商决定密码算…

TLS协议详解!

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

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&#xff0c;Dynamic storage allocation。RTOS 一般情况下动态内存使用malloc申请分配&#xff0c;但是存在两个缺…

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

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

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

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

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

文章目录 The arrival ProcessQueueing SystemThe M/M/1 queueThe M/M/1/N queue References 排队理论已被用于评估通信网络的性能很多年了。早在1917年&#xff0c;丹麦数学家 Erlang 就将该理论用于电话交换机的设计&#xff0c;并开创了现在著名的 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…

泊松分布,指数分布与排队论模型

转自http://www.ruanyifeng.com/blog/2015/06/poisson-distribution.html泊松分布和指数分布&#xff1a;10分钟教程 https://www.bilibili.com/video/BV1L5411x7vH?p44北京工业大学运筹学 泊松分布与指数分布 泊松分布 泊松分布就是描述某段时间内&#xff0c;事件具体的…

排队论模型之M/M/S模型

相关参数 模型推导 例题 代码实现&#xff1a; s3; %服务台的个数 mu0.4; %单位时间内能服务的顾客数 lambda0.9; %单位时间内到达的顾客数rolambda/mu; rosro/s; sum10; %求解P0时把其分成两部分计算&#xff0c;分别为sum1,sum2 for i0:(s-1) sum1sum1ro.^i/factorial(i); …

排队模型和排队系统仿真

排队模型和排队系统仿真 Gary哥哥 2021.1.31 排队论又称随机服务系统&#xff0c;是研究系统随机聚散现象和随机服务系统工作过程的数学理论和方法&#xff0c;是运筹学的一个分支。排队论的基本思想是 1909 年丹麦数学家 A.K. 埃尔朗在解决自动电话设计问题时开始形成的&#…

数学模型算法实现之排队论

排队问题 https://wenku.baidu.com/view/475f68cb65ce0508763213a7.html 排队论详解 排队论又叫随机服务系统理论或公用事业管理中的数学方法。它是研究各种各样的排队现象的。它所要解决的主要问题是:在排队现象中设法寻求能够达到服务标准的最少设备,使得在满足服务对象…