UCAS 24秋网络认证技术 CH10 SSL 复习

  1. TLS字段、参数含义
  2. 要了解每个消息是什么意思 基本方式只验证服务端,服务端有证书,变形方式加上验证客户端
  3. TLS1.3区别

协商过程

背景

Record层使用的各种加密算法参数,均由Handshake协议协商获得。

具体过程

  1. 随机数交换

    • Client/Server相互发送随机数(以明文形式)。
  2. 算法选择

    • 协商双方选择使用的加密算法。
  3. 公钥交换

    • Server发送自己的公钥证书。
    • Client验证该证书的有效性。
  4. 生成Premaster Secret

    • Client生成Premaster Secret,并用Server的公钥加密后发送给Server。
    • Server解密获取Premaster Secret。
  5. 密钥计算

    • 双方基于共享的Premaster Secret和随机数,使用约定的算法计算出:
      • W Key(工作密钥)
      • IV(初始化向量)
      • MAC_Secret(消息认证密钥)

1. TLS1.2交互过程

image.png

1. 简单过程(ClientHello 和 ServerHello)

  • ClientHello

    • 包含以下信息:

      • 支持的最高协议版本。
      • 32字节随机数(4字节时间 + 28字节随机数)。
      • Session ID(用于Session重用,可选)。
      • 支持的密码算法列表(cipher suites)。
    • 数据结构:

      struct {uint32 gmt_unix_time;opaque random_bytes[28];
      } Random;
      
  • ServerHello

    • 包含以下信息:

      • 同样的32字节随机数
      • 选定的协议版本和算法(cipher suite,单个)。
      • Session ID(同样可选)。
    • 数据结构:

      struct {ProtocolVersion server_version;Random random;SessionID session_id;CipherSuite cipher_suite;CompressionMethod compression_method;
      } ServerHello;
      

2. Server端发送证书及确认

image.png

  • Certificate

    • Server端发送证书链,包含从Server证书到信任链开始的完整链。
    • 包含Server的RSA公钥。
  • ServerHelloDone

    • Server端完成Hello阶段,等待Client的响应。

3. Client生成并发送密钥 (ClientKeyExchange)

image.png

  • Premaster Secret

    • Client根据ServerHello选择的密钥协商算法生成。

    • 生成的48字节Premaster Secret用Server证书公钥加密后发送。

    • 数据结构:

      struct {select (KeyExchangeAlgorithm) {case rsa: EncryptedPreMasterSecret;...} exchange_keys;
      } ClientKeyExchange;
      
  • 共享的秘密信息

    • 共有以下三部分:
      • 32字节Client.random(ClientHello)。
      • 32字节Server.random(ServerHello)。
      • 48字节Premaster Secret(秘密)。

4. 生成Master Secret

  • 基于Premaster Secret和随机数生成48字节Master Secret

  • 使用伪随机函数(PRF):

    master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random)[0..47];
    

5. 生成所需的密钥、IV、MAC Secret等

  • 基于Master Secret、Client Random和Server Random生成:

    • MAC Secret(消息认证密钥)。
    • 工作密钥(Write Key)
    • IV(初始化向量)。
  • PRF计算:

    key_block = PRF(SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random + SecurityParameters.client_random);
    

6. ChangeCipherSpec & Finished

image.png

  • ChangeCipherSpec

    • 客户端和服务器分别切换到协商好的加密算法及密钥。
  • Finished

    • 双方发送验证消息,表明握手完成:

      verify_data = PRF(master_secret, finished_label, Hash(handshake_messages))[0..verify_data_length-1];
      

7. 最基本的Handshake协议流程总结

  • 步骤总结
    1. Client → Server:ClientHello。
    2. Server → Client:ServerHello, Certificate, ServerHelloDone。
    3. Client → Server:ClientKeyExchange, [ChangeCipherSpec], Finished。
    4. Server → Client:[ChangeCipherSpec], Finished。
    5. 双方进入Application Data阶段。

基本变形1 - Client鉴别

image.png image.png

变形1:Client鉴别
  • 基本背景
    • 默认情况下,Client会利用Server证书对Server进行鉴别。
    • 在支持双向认证的场景中,Server可以对Client进行鉴别。

流程

  1. Server向Client请求证书
    • 在发送完Server证书之后,Server发送CertificateRequest消息

    • CertificateRequest中列出了Server接收的Client证书要求,包括:

      • 算法(如RSA、DSS等)。
      • 受信任的CA名称。
    • 数据结构:

      struct {ClientCertificateType certificate_types<1..2^8-1>;SignatureAndHashAlgorithm supported_signature_algorithms<2^16-1>;DistinguishedName certificate_authorities<0..2^16-1>;
      } CertificateRequest;
      

  1. Client响应
    • Client需要回复CertificateCertificateVerify消息:
      • Certificate消息:包含Client的证书链,证明自己的身份。

        struct {ASN.1Cert certificate_list<0..2^24-1>;
        } Certificate;
        
      • CertificateVerify消息

        • 对所有之前的Handshake消息进行数字签名(从ClientHello到当前消息,不包括本消息)。
        • 用于证明Client对所发送消息的完整性及其身份的真实性。
        struct {digitally-signed struct {opaque handshake_messages[handshake_messages_length];};
        } CertificateVerify;
        

  1. 验证流程
    • Server验证Client提交的证书是否可信,是否满足其在CertificateRequest中的要求。
    • 确认Client身份后,完成后续Handshake过程。

总结

  • 双向认证的场景主要通过Server对Client的证书请求与验证实现。
  • Client通过CertificateVerify消息提供对其身份及Handshake消息的数字签名,确保其认证信息的真实性和完整性。

变形2 - 不同类型证书/算法的影响

image.png image.png

1. ClientHello

  • Client → Server:发送ClientHello消息。
    • 包含随机数 (R_C)。
    • 支持的协议版本、加密算法、压缩方法等信息。

2. ServerHello

  • Server → Client:发送ServerHello消息。
    • 包含随机数 (R_S)。
    • 确定的协议版本、加密算法、Session ID。

3. Server发送附加消息

  • Server根据需要发送以下消息:
    • Certificate (可选):发送Server证书链。
    • ServerKeyExchange (可选):在非RSA加密时发送,包含密钥交换所需的信息。
    • CertificateRequest (可选):请求Client提供证书(用于双向认证)。
    • ServerHelloDone:表明Server完成Hello阶段,等待Client响应。

4. Client发送响应消息

  • Certificate (可选):发送Client证书,用于证明其身份(双向认证)。
  • ClientKeyExchange:发送密钥交换信息(例如,Premaster Secret加密数据)。
  • CertificateVerify (可选):对之前的Handshake消息进行签名,用于验证Client身份。

5. ChangeCipherSpec & Finished

  • Client → Server
    • ChangeCipherSpec:通知切换到加密通信。
    • Finished:发送加密的验证消息,表明握手完成。
  • Server → Client
    • ChangeCipherSpec:通知切换到加密通信。
    • Finished:发送加密的验证消息,表明握手完成。

6. 加密的Application Data阶段

  • 双方开始加密通信,传输实际的应用数据。
  • 所有后续数据都受到握手中协商的加密算法和密钥的保护。

重要说明

  • 带星号 (*) 的步骤为可选。
  • ChangeCipherSpecFinished标志着切换到加密通信阶段。
  • 握手完成后,所有通信均加密。

变形3 - Session重用

image.png

Session重用的背景
  • Session重用机制旨在提高TLS协议的效率,避免重新协商所有参数。
  • 使用Session ID来标识和重用之前的会话。

1. 第一次协商会话

  • 在首次TLS握手协商时:
    • ServerHello中会给出一个Session ID
    • 如果Server不想支持Session重用,则不会提供Session ID。
    • 双方完成会话协商后,传输一定的Application Data后,断开连接。

2. 第二次会话中Client发起重用

  • ClientHello
    • 在第二次会话中,Client在ClientHello中携带上次的Session ID,表示希望重用Session。
    • 如果Client不希望重用Session,则在ClientHello中不提供Session ID。

3. Server处理Client的重用请求

  • ServerHello
    • Server接收到带有Session ID的ClientHello后,会查找自己的缓存:
      • 如果找到与该Session ID对应的Session,并且Server允许重用:
        • 在返回的ServerHello中携带相同的Session ID,表示同意重用。
        • 跳过完整握手过程,直接切换到加密算法,通过发送ChangeCipherSpecFinished消息完成重用过程。
      • 如果未找到或不允许重用:
        • Server返回一个新的Session ID,表示重新协商。

Session重用过程的关键点

  1. Client的请求

    • ClientHello中明确是否希望重用Session。
  2. Server的处理

    • 通过Session ID查询缓存,并决定是否接受重用请求。
  3. 效率提升

    • 如果允许重用,跳过复杂的握手过程,直接切换到加密传输阶段。

2. TLS1.3的区别

image.png image.png image.png image.png image.png image.png image.png

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

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

相关文章

支付宝商家转账到账户余额,支持多商户管理

大家好&#xff0c;我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能&#xff0c;支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号&#xff0c;即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…

c# 中Parallel.ForEach 对其中一个变量进行赋值 引发报错

在 C# 中使用 Parallel.ForEach 方法时&#xff0c;如果你尝试在并行循环中对共享变量进行赋值&#xff0c;很可能会遇到线程安全问题或竞争条件&#xff08;race conditions&#xff09;&#xff0c;这可能导致数据不一致、程序崩溃或其他不可预测的行为。 问题描述 假设你有…

基于Django的旅游信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;随着…

常见的框架漏洞复现

1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖&#xff0c;通过覆盖类的核心属性filter导致rce&#xff0c;其攻击点较为多&…

UE5中实现右键开镜效果

右键之后添加时间轴&#xff0c;然后设置视野即可。Set Field Of View 时间轴设置&#xff0c;第一个点设置0,90度&#xff0c;因为默认的就是90度 第二个点看武器的类型或者倍境来设置&#xff0c;时间就是开镜时间&#xff0c;值越小开镜速度越快&#xff0c;第二个值就是视野…

关于华硕Armoury Crate(奥创中心)安装程序失败、卡进度条问题解决方案

关于华硕Armoury Crate(奥创中心&#xff09;安装失败解决方案 清理旧版本文件 如果之前安装过Armoury Crate&#xff0c;可能有残留文件导致冲突&#xff1a; 利用官方的卸载工具&#xff0c;卸载旧版本&#xff1a; https://www.asus.com.cn/supportonly/armoury%20crate/…

iOS18 上的 Genmoji

在 WWDC 2025 期间&#xff0c;一种名为Genmoji的新型表情符号问世。 许多用户可能仍然不确定 Genmoji 是什么、它与传统表情符号有何不同、如何使用它以及如何恢复丢失的数据。因此&#xff0c;在本文中&#xff0c;我们将介绍您需要了解的有关 iOS 18 上的 Genmoji 的所有信…

基于等保的安全审计运维系统

摘要 本文研究与设计一种基于等级保护&#xff08;等保&#xff09;要求的安全审计运维系统&#xff0c;以适应日益严峻的网络安全形势和不断提高的安全审计需求。随着信息技术的快速发展和应用广泛&#xff0c;信息系统安全面临的威胁也在不断增加&#xff0c;特别是在关键信…

C# 设计模式(结构型模式):装饰器模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;装饰器模式 在软件开发中&#xff0c;面对需要扩展功能但又不想修改已有代码的情况时&#xff0c;装饰模式&#xff08;Decorator Pattern&#xff09;是一个非常有用的设计模式。装饰模式允许我们在不改变对象自身…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 【OAuth2系列】集成微…

@Transcational注解为什么没有生效?

最近开发时遇到了需要使用事务的场景&#xff0c;之前的开发场景&#xff0c;都没有使用过事务&#xff0c;因此记录一下使用实践&#xff0c;以及踩坑。回想之前的开发经历&#xff0c;发现有一些场景是需要使用事务的&#xff0c;只不过当时开发经验有限&#xff0c;没想到使…

传感器与检测技术基础知识

传感器检测系统 检测系统的组成:传感器、信号调理、数握采集、信号处理、信号显示、信号输出、输入设备、稳压电源。 检测系统的基本误差分类&#xff1a;绝对误差、相对误差、引用误差&#xff0c;最大引用误差。 测量系统的误差分类&#xff1a;系统误差、随机误差、粗大误…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R&#xff08;R平方&#xff09;分数&#xff0c;也称为决定系数&#xff0c;是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间&#xff0c;其值越接近1&#xff0c;说明…

stm32HAL库使LED闪烁

PC13引脚为开漏接法 生成代码时设置为out put open drain gpio out put level 设置为high 1表示熄灭 我们将pa9引脚连接为推挽接法 生成代码时设置为 out put push pull Gpio out put level 设置为low 0 表示熄灭 代码使其亮起再延时0.5秒再熄灭再延时0.5秒

对一个双向链表,从尾部遍历找到第一个值为x的点,将node p插入这个点之前,如果找不到,则插在末尾。使用C语言实现

以下是一个用C语言实现的双向链表&#xff08;Doubly Linked List&#xff09;插入操作的代码。该代码从尾部遍历找到第一个值为x的节点&#xff0c;并在其前插入新节点p&#xff0c;或者在未找到时将其插入链表末尾。 #include <stdio.h> #include <stdlib.h>// 定…

Linux(Centos 7.6)基础命令/常用命令说明

1.目录相关命令 命令命令说明pwd用于显示/打印当前目录位置。ls/ll 列出当前目录下的文件或者目录&#xff0c;ll是ls -l的别名&#xff0c;ls仅显示名称&#xff0c;ll会显示详细的目录文件信息。 cd目录切换&#xff0c;常见用法有&#xff0c;cd /切换到根目录&#xff0c;…

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…

python文件操作相关(excel)

python文件操作相关&#xff08;excel&#xff09; 1. openpyxl 库openpyxl其他用法创建与删除操作单元格追加数据格式化单元格合并单元格插入图片公式打印设置保护工作表其他功能 2. pandas 库3. xlrd 和 xlwt 库4. xlsxwriter 库5. pyxlsb 库应用场景参考资料 在 Python 中&a…

C++ 基础概念: 未定义行为(Undefined Behavior)

文章目录 Intro如何正确认识 UB有多少未定义行为?对 UB 的误解 C 标准定义的几种行为1. 定义的行为 (defined behavior)2. 实现定义的行为 (implementation defined behavior)3. 未指定的行为 (unspecified behavior)4. 未定义行为 (undefined behavior)揭晓答案 C 中如何定义…

yolo小damo合集

效果如下&#xff1a;这个是图片检测 效果如下&#xff1a;这个是视频检测 效果如下&#xff1a;这个是摄像头检测 1 相关库 除了yolov11所用库之外&#xff0c;本文所用到的额外库为pyqt5&#xff0c;输入指令进行安装 pip install pyqt5 导入所需要的库 import sys fro…