当前位置: 首页 > news >正文

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

相关文章:

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

TLS字段、参数含义要了解每个消息是什么意思 基本方式只验证服务端&#xff0c;服务端有证书&#xff0c;变形方式加上验证客户端TLS1.3区别 协商过程 背景 Record层使用的各种加密算法参数&#xff0c;均由Handshake协议协商获得。 具体过程 随机数交换 Client/Server相互…...

【linux内核分析-存储】EXT4源码分析之“文件删除”原理【七万字超长合并版】(源码+关键细节分析)

EXT4源码分析之“文件删除”原理【七万字超长合并版】&#xff08;源码关键细节分析&#xff09;&#xff0c;详细的跟踪了ext4文件删除的核心调用链&#xff0c;分析关键函数的细节&#xff0c;解答了开篇中提出的三个核心疑问。 文章目录 提示前言全文重点索引1.源码解析1.1 …...

代码随想录 day62 第十一章 图论part11

第十一章&#xff1a;图论part11 Floyd 算法精讲 Floyd 算法代码很简单&#xff0c;但真正理解起原理 还是需要花点功夫&#xff0c;大家在看代码的时候&#xff0c;会发现 Floyd 的代码很简单&#xff0c;甚至看一眼就背下来了&#xff0c;但我为了讲清楚原理&#xff0c;本…...

springboot571基于协同过滤算法的私人诊所管理系统(论文+源码)_kaic

摘 要 随着时代的发展&#xff0c;人们的生活方式得到巨大的改变&#xff0c;从而慢慢地出现了大量私人诊所信息&#xff0c;私人诊所信息管理需要一个现代化的管理系统&#xff0c;进行私人诊所的管理。 私人诊所管理系统的开发就是为了解决私人诊所信息管理的问题&#xff0…...

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin&#xff0c;未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案&#xff0c;云打包 需要排队且还有次数限制&#xff0c;本地打包 则就没有这些限制&#xff0c;而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…...

vite+vue3动态引入资源文件(问题已解决但离了个大谱)

教程很详细&#xff0c;直接上代码 解决方法&#xff08;赶时间的小友理解下这函数就能解决问题了&#xff0c;就是处理了下路径&#xff0c;运气不好遇到问题再回来也不迟&#x1f923;&#x1f923;&#x1f923;&#xff09; const getSvgUrl (name) > {// name: svg_1…...

通过 4 种方式快速将音乐从 iPod 传输到 Android

概括 在 iPod 上听音乐很酷&#xff0c;但是当您拥有最新的 Android 手机时&#xff0c;也许您想在新手机上欣赏 iPod 音乐。那么&#xff0c;你的计划是什么&#xff1f;如何将音乐从 iPod 传输到 Android&#xff1f; 如果您担心这个问题&#xff0c;请看看下面的方法。他们…...

ArcGIS中怎么把数据提取到指定范围(裁剪、掩膜提取)

最近&#xff0c;经常能收到怎么把数据提取到指定范围、栅格数据怎么裁剪、矢量数据怎么裁剪、栅格数据怎么掩膜提取的咨询。 下面是我对这个问题的解决思路&#xff1a; 对于矢量数据&#xff1a; ①首先把数据加载进来 ②软件界面上面的工具栏找到→地理处理→裁剪&#x…...

【Vaadin flow 实战】第3讲-快速上手构建VaadinFlow+Springboot的全栈web项目

快速构建VaadinFlowSpringboot的全栈web项目 温馨提示&#xff0c;本文讲解比较精炼&#xff0c;主要以快速上手开发为主。 官方提供了与本文类似的教程讲解&#xff0c;地址https://vaadin.com/docs/latest/getting-started 1访问vaadin官方提供的start网站(类似于 spring i…...

HBase Cassandra的部署和操作

目录 一&#xff0e;数据库的部署与配置 二&#xff0e;使用命令访问数据库 三&#xff0e;数据库的设计 四&#xff0e;编程实现数据库的访问 一&#xff0e;数据库的部署与配置 1.在单个节点上对进行数据库的单机部署 &#xff08;1&#xff09;下载apache-cassandra-4.1.7-…...

用户界面软件01

Jens Coldewey 著&#xff0c;Tom.X 译 本文中的模式语言逐步深入地探讨用户界面架构的设计&#xff0c;它基于人机工程学&#xff0c;足以形成一套完整的体系。如果你对这方面有兴趣&#xff0c;请参考[Tog92]&#xff0c;[Coo95]和[Col95]。 本文不讨论用户界面的布局&…...

【云原生】Docker Compose 从入门到实战使用详解

目录 一、前言 二、Docker Compose 介绍 2.1 Docker Compose概述 2.2 Docker Compose特点 2.3 Docker Compose使用场景 三、Docker Compose 安装 3.1 安装docker环境 3.2 Docker Compose安装方式一 3.2.1 下载最新版 3.2.2 设置权限 3.2.3 设置软链接 3.2.4 查看版本…...

【ShuQiHere】使用 SCP 进行安全文件传输

【ShuQiHere】&#x1f680; 在日常的开发和运维工作中&#xff0c;文件传输是一个常见的任务。scp&#xff08;Secure Copy&#xff09;是一个基于 SSH 协议的文件传输工具&#xff0c;能够在本地和远程主机之间安全地复制文件和目录。本文将详细介绍 scp 的使用方法&#xf…...

海康威视H5player问题汇总大全

由于除了要支持Windows平台&#xff0c;还要支持国产系统的平台&#xff0c;这时就用到了H5player&#xff0c;但是这个在使用调试的时候会遇到各种各样的问题&#xff0c;便在此分享一下&#xff0c;供大家分享&#xff01;&#xff01;&#xff01; 问题一&#xff1a;Unexp…...

力扣23.合并K个升序链表

文章目录 一、前言二、最小堆解法三、分治解法 一、前言 23. 合并 K 个升序链表 本题的要求是把K个链表进行合并&#xff0c;合并后的链表必须是从小到大的。 并且这K个链表也是从小到大的升序链表。 二、最小堆解法 既然每个链表都是升序的&#xff0c;也就是从小到大的。 …...

【C 语言指针篇】指针的灵动舞步与内存的神秘疆域:于 C 编程世界中领略指针艺术的奇幻华章

文章目录 【C 语言篇】指针的灵动舞步与内存的神秘疆域&#xff1a;于 C 编程世界中领略指针艺术的奇幻华章前言一 、指针的介绍与使用1. 指针的介绍1.1指针表示1.2指针变量1.3空指针 2. 使用指针2.1交换两个变量的值2.2计算输出最小值和最大值 二、野指针的介绍与使用1. 野指针…...

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…...

在一台服务器上使用docker运行kafka集群

1.拉取镜像 docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper 2.创建集群之间通信的网络 docker network create kafka-cluster-net docker network inspect kafka-cluster-net 3.将zookeeper加入到网络中 docker network connect kafka-cluster-net zooke…...

Apache Celeborn 在B站的生产实践

背景介绍 Shuffle 演进 随着B站业务的飞速发展,数据规模呈指数级增长,计算集群也逐步从单机房扩展到多机房部署模式。多个业务线依托大数据平台驱动核心业务,大数据系统的高效性与稳定性成为公司业务发展的重要基石。如图1,目前在大数据基础架构下,我们主要采用 Spark、Fl…...

JOIN 和 OUTER JOIN,SQL中常见的连接方式

1. INNER JOIN&#xff08;简称 JOIN&#xff09; INNER JOIN 是 SQL 中最常用的一种连接方式&#xff0c;默认的 JOIN 就是 INNER JOIN。它返回两个表中满足连接条件的匹配记录。 作用&#xff1a;返回两个表中所有满足 ON 条件的记录。特性&#xff1a;如果表中的某些行在连…...

大模型Agent越调越乱?别怪模型不够强,这三层优化才是关键!

文章指出&#xff0c;使用相同大模型的企业&#xff0c;Agent表现差异巨大&#xff0c;原因并非模型强弱&#xff0c;而是系统优化问题。文章提出三层优化框架&#xff1a;模型层&#xff08;通用能力&#xff09;、Harness层&#xff08;系统编排&#xff09;、Context层&…...

SQL处理大规模分组聚合的内存限制_调整服务器配置

MySQL分组聚合OOM时应调大tmp_table_size和max_heap_table_size而非sort_buffer_size&#xff1b;PostgreSQL需按并发和操作数合理设work_mem&#xff1b;ClickHouse需联动max_threads配置max_bytes_before_external_group_by。MySQL分组聚合OOM时&#xff0c;sort_buffer_size…...

3步解锁Cursor Pro完整功能:告别试用限制的终极免费解决方案

3步解锁Cursor Pro完整功能&#xff1a;告别试用限制的终极免费解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached yo…...

Linux系统遭挖矿入侵:从异常告警到根因定位的实战排查指南

1. 告警触发&#xff1a;CPU异常飙升的第一反应 那天凌晨3点&#xff0c;我正在睡梦中&#xff0c;手机突然疯狂震动。打开一看&#xff0c;监控系统连续发了十几条告警&#xff1a;某台线上服务器的CPU使用率突破95%&#xff0c;持续时间已超过15分钟。这种半夜告警最让人头疼…...

WarcraftHelper终极指南:5个简单步骤让魔兽争霸3在现代Windows系统完美运行

WarcraftHelper终极指南&#xff1a;5个简单步骤让魔兽争霸3在现代Windows系统完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸…...

MySQL数据库磁盘写满后如何紧急处理_清理日志与扩容空间

磁盘写满时MySQL卡住应先确认mysqld进程存活并检查deleted大文件&#xff1b;优先停用日志后删除slow/general log&#xff0c;binlog和redo log需停库操作&#xff1b;ibdata1膨胀只能通过导出、删文件、启用innodb_file_per_table重建解决。MySQL磁盘写满时&#xff0c;SHOW …...

别再乱用concat了!FFmpeg合并视频文件前必须检查的3个细节(清单编码、路径、Profile)

FFmpeg视频合并避坑指南&#xff1a;3个必须检查的关键细节 第一次用FFmpeg合并视频时&#xff0c;我盯着屏幕上那串"Invalid data found when processing input"错误提示整整半小时。明明只是想把几个会议录像拼在一起&#xff0c;为什么连这么简单的操作都会出错&a…...

当EPICS遇上物联网:手把手教你用MQTT-CA桥接器打通工业数据流

EPICS与物联网融合实战&#xff1a;构建MQTT-CA桥接器的完整指南 在工业自动化与科研设施领域&#xff0c;EPICS&#xff08;Experimental Physics and Industrial Control System&#xff09;作为成熟的分布式控制系统框架&#xff0c;正面临与物联网技术深度融合的历史机遇。…...

别再写if-elseif-else了!Matlab里这5个坑,新手程序员踩过几个?

别再写if-elseif-else了&#xff01;Matlab里这5个坑&#xff0c;新手程序员踩过几个&#xff1f; 刚接触Matlab时&#xff0c;我总以为条件语句不过是if-else的简单组合——直到某次调试让我对着屏幕怀疑人生。为什么明明逻辑正确的代码就是跑不出预期结果&#xff1f;为什么看…...

Redis 缓存穿透、击穿、雪崩解决方案

在互联网高并发场景下&#xff0c;Redis 作为缓存层已经成为系统性能的核心命脉。然而&#xff0c;当缓存层遭遇异常情况时&#xff0c;原本作为“盾牌”的缓存可能瞬间变成系统崩溃的导火索。在业界&#xff0c;有三个经典的缓存问题被称为“三大杀手”——缓存穿透、缓存击穿…...