tls会话交互过程之一

一、过程概述

TLS(传输层安全)是一种用于在不安全网络上实现安全通信的协议。它的前身是SSL(安全套接层)。TLS通过一系列握手和消息交换过程来建立一个安全的通信通道。以下是TLS握手的基本步骤:

TLS 握手过程:

1. 客户端Hello(ClientHello): 客户端向服务器发送一个`ClientHello`消息,该消息包含以下信息:
    - TLS版本
    - 支持的密码套件(Cipher Suites)
    - 随机数(Client Random)
    - 可选的会话ID(用于会话恢复)

2. 服务器Hello(ServerHello): 服务器收到ClientHello后,选择一个客户端和服务器都支持的密码套件和TLS版本,并发送ServerHello消息。该消息包含:
    - 选定的TLS版本
    - 选定的密码套件
    - 随机数(Server Random)

3. 服务器证书(Server Certificate): 服务器发送其数字证书,以便客户端可以验证服务器的身份。

4. 密钥交换(Key Exchange): 服务器可能会发送一个密钥交换消息(取决于选定的密码套件)。这通常用于设置预主密钥(Pre-Master Secret)。(为了让客户端将生成的预主密钥加密,所以先把公钥传给客户端,就是这个过程

在密钥交换过程中,服务器的角色取决于所使用的密钥交换算法,甚至有些算法可能没有这个过程,例如RSA。以下是几种常见的密钥交换方法:

Diffie-Hellman(DH)或椭圆曲线Diffie-Hellman(ECDH):

① 参数和公钥发送(ServerKeyExchange): 服务器发送Diffie-Hellman参数(对于DH)或椭圆曲线参数(对于ECDH)以及其公钥


DHE(动态Diffie-Hellman)或ECDHE(椭圆曲线动态Diffie-Hellman):

② 参数和公钥发送(ServerKeyExchange): 服务器发送新生成的Diffie-Hellman或椭圆曲线参数以及公钥
 

5. 服务器Hello完成(ServerHelloDone): 服务器发送一个ServerHelloDone消息,表示它已完成握手消息的发送。

6. 客户端密钥交换(Client Key Exchange): 客户端发送一个密钥交换消息,该消息包含预主密钥或足够的信息以便服务器能推导出预主密钥。(预主密钥由客户端生成)

和第4步类似,只不过方向相反,当前是否交换要取决于加密算法,例如RSA:

因为"Certificate"消息包含服务器的数字证书,该证书内嵌有服务器的RSA公钥,所以不用"key exchange" 过程。

  1. 客户端密钥交换: 客户端生成一个预主密钥(Pre-Master Secret),并使用服务器发送到客户端的公钥对其进行加密,然后将加密后的预主密钥发送给服务器。这个步骤通常在"ClientKeyExchange"消息中完成。

后续(非客户端密钥交换过程):

  1. 服务器解密: 服务器使用其私钥解密这个加密过的预主密钥,从而获得原始的预主密钥。

  2. 生成会话密钥: 服务器和客户端都使用这个预主密钥(以及在握手过程中交换的其他随机值)来生成实际用于会话加密的主密钥。

7. 更改密码规格(Change Cipher Spec): 客户端和服务器都发送一个Change Cipher Spec消息,表示之后的通信将使用新协商的加密设置。

更改密码规格的作用:

  1. 确认加密设置: 在TLS握手过程中,客户端和服务器会协商一组加密算法和参数(称为“密码套件”)。"Change Cipher Spec"消息表示双方将开始使用这些新协商的设置。

  2. 启用加密: 在发送"Change Cipher Spec"消息后,所有后续的通信都将使用新的加密设置。这确保了数据的机密性和完整性。

  3. 会话层次: 这一步也标志着新的会话层次的开始,即从这一点开始,双方将使用新的会话密钥进行通信。

  4. 信号状态变更: 这个消息本身通常不加密,但它是一个信号,表明后续的消息(如"Finished"消息)将使用新的加密和完整性检查机制。

  5. 发送“Change Cipher Spec”消息:一旦双方确认了密码套件和所有必要的密钥材料,它们就会发送一个"Change Cipher Spec"消息。

  6. 加密生效:收到"Change Cipher Spec"消息后,双方将开始使用新的加密设置。这通常是通过使用先前协商的预主密钥(Pre-Master Secret)来生成会话密钥,然后使用这些会话密钥来加密和解密数据。

8. 完成(Finished): 客户端和服务器都发送一个Finished消息,该消息使用新的加密设置加密。

9. 应用数据(Application Data): 握手完成后,客户端和服务器就可以安全地交换应用数据。

密钥生成:

- 预主密钥(Pre-Master Secret): 在密钥交换阶段生成或交换。
- 主密钥(Master Secret): 使用预主密钥和两个随机数(Client Random和Server Random)生成。
- 会话密钥(Session Keys): 从主密钥派生出来,用于加密和解密数据。

主密钥通常是对称加密算法的密钥,用于加密应用数据。

这只是一个高级概述,TLS握手和密钥交换有多种变体,取决于使用的密码套件和配置。

二、概念解释

1.client random和server random

在TLS(传输层安全)握手过程中,Client Random和Server Random是两个非常重要的随机数,它们有多个用途:

密钥生成:

1. 生成主密钥(Master Secret): Client Random和Server Random与预主密钥(Pre-Master Secret)一起用于生成主密钥。主密钥是对称加密和解密数据的关键。

2. 生成会话密钥(Session Keys): 主密钥进一步用于生成用于加密和解密数据的会话密钥。这些会话密钥也依赖于Client Random和Server Random。

安全性增强

1. 防止重放攻击: 每次握手时都会生成新的Client Random和Server Random,这有助于防止重放攻击。

2. 确保唯一性: Client Random和Server Random的唯一性有助于确保每个TLS会话都是唯一的。

3. 增加熵: 这两个随机数增加了系统的熵(随机性),这是密码系统安全性的关键因素。

协议兼容性

1. 版本协商: 尽管ClientHello和ServerHello消息中包含了协议版本信息,但Client Random和Server Random也可以用于确保双方都在使用相同版本的TLS协议。

总体而言,Client Random和Server Random在确保通信安全、生成密钥和防止各种攻击方面起着至关重要的作用。它们是TLS安全性的基础组成部分。

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

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

相关文章

Leetcode:【169. 多数元素】

题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 难度:简单 题目链接:169. 多数元素 示例 1&#xff…

“系统的UI”——SystemUI

SystemUI的实现 以StatusBar为例,来分析下Android系统具体是如何实现它们的。 相关代码分为两部分,即: Service部分 代码路径:frameworks/base/services/java/com/android/server。 应用部分 代码路径:frameworks…

Dynamics 365应用程序开发 - 11. 通过学习路径培训用户

Dynamics 365学习路径是在Dynamics 365 9.0版本中引入的。此功能允许您在用户打开页面时在Dynamics 365中添加可自定义的帮助。它还允许用户遵循帮助并同时工作,提供了Dynamics365的适应性和轻松学习。 在本章中,将涵盖以下主题,以提高您对学习路径的理解: 学习路径概述学…

对接西部数据Western Digital EDI 系统

近期我们为国内某知名电子产品企业提供EDI解决方案,采用知行之桥 EDI 系统作为核心组件,成功与西部数据Western Digital(简称西数)建立EDI连接,实现数据安全且自动化传输。 EDI实施需求 EDI连接 传输协议:A…

c++ 学习之 静态成员变量和静态成员函数

文章目录 前言正文静态成员变量初始化操作如何理解共享一份数据访问权限 静态成员函数访问方式静态成员函数只能访问静态成员变量访问权限 前言 静态成员分为 1)静态成员变量 所有对象共享一份数据在编译阶段分配空间类内声明,类外初始化 2&#xff09…

Spring 怎么解决循环依赖的呢?

Spring 怎么解决循环依赖 什么是循环依赖那 Spring 怎么解决循环依赖的呢?为什么要三级缓存?⼆级不⾏吗? 什么是循环依赖 Spring 循环依赖:简单说就是自己依赖自己,或者和别的 Bean 相互依赖。 只有单例的 Bean 才存在…

Qt之随机数

介绍使用qsrand和qrand生成随机数。 生成随机数 生成随机数主要用到了函数qsrand和qrand,qsrand用来设置种子点,该种子为qrand生成随机数的起始值。如果不调用qsrand,那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使…

软件测试中的43个功能测试点总结

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。针对web系统的常用测试方法如下: 1、页面链接检查: 每一个链接是否都有对应的页面,并且页面之间切换正…

react使用react-split-pane分割面板

目录 react使用react-split-pane分割面板code.jsxsplitSpane.scss react使用react-split-pane分割面板 安装:npm i react-split-pane code.jsx import React, { useState, useEffect } from "react"; import StyleDeptId from "styled-components…

设计模式系列-原型模式

一、上篇回顾 上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每 个组成部分的详细创建步骤可以是动态的变化的,但是每个对象的组…

uniapp的webview实现左滑返回上一个页面

uniapp默认左滑是关闭整个webview&#xff0c;而不是关闭当前页 实现思路&#xff1a;拦截webview的url跳转操作&#xff0c;将新url用webview组件重新打开&#xff0c;当左滑的时候&#xff0c;默认关闭的就是当前webview&#xff0c;继而跳转到上一次的页面中 <template&…

LeetCode 731. My Calendar II【设计,有序映射,差分;线段树】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

剑指 Offer 07. 重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解题思路 首先&#xff0c;根据前序遍历结果确定根节点。前序遍历的第一个元素即为根节点的值。 接下来&#xff0c…

第17节-PhotoShop基础课程-画笔修复工具

文章目录 前言1.画笔工具1.基本操作2.工具选项1.不透明度2.流量3.平滑2.画笔大小工具栏大小设置 4.笔刷 2.铅笔工具3.颜色替换工具 批量替换颜色4.混合器画笔工具-人像精修 前言 画笔工具的使用 1.画笔工具 1.基本操作 画画 2.工具选项 1.不透明度 2.流量 设置低了会有间隔&…

第29节-PhotoShop基础课程-滤镜库

文章目录 前言1.滤镜库2.Camera Raw滤镜 &#xff08;用来对图片进行预处理&#xff0c;最全面的一个&#xff09;3.神经滤镜&#xff08;2022插件 需要先下载&#xff09;4.液化&#xff08;胖-> 瘦 矮->高&#xff09;5.其它滤镜1.自适应广角2.镜头矫正 把图片放正3.消…

Kafka详解

目录 一、消息系统 1、点对点的消息系统 2、发布-订阅消息系统 二、Apache Kafka 简介 三、Apache Kafka基本原理 3.1 分布式和分区&#xff08;distributed、partitioned&#xff09; 3.2 副本&#xff08;replicated &#xff09; 3.3 整体数据流程 3.4 消息传送机制…

通过jr-qrcode生成二维码并下载到客户端本地(Vue)

生成二维码 首先生成二维码图片的地址 引入jr-qrcode import jrQrcode from jr-qrcode; 生成二维码图片的地址 // 生成二维码地址 getQRCodeUrl(spreadUrl) {const QRCodeUrl jrQrcode.getQrBase64(spreadUrl);return QRCodeUrl; }that.backUrl jrQrcode.getQrBase64(da…

JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续,山水长

JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续&#xff0c;山水长

Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目

day1 接口文档地址&#xff1a;https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码&#xff0c;演示移动端面经内容&#xff0c;明确功能模块 2.项目收获 二、项目创建目录初始化 vue-cli 建项目 1.安装脚手架 (已安装…

Python的sort()与sorted()函数详解

目录 sort&#xff08;&#xff09;函数 sorted&#xff08;&#xff09;函数 key参数 区别 sort&#xff08;&#xff09;函数 sort()方法&#xff1a;该方法用于原地对列表进行排序&#xff0c;即直接在原始列表上进行排序操作&#xff0c;并不返回一个新的列表。 my_l…