【HTTPS基础概念与原理】TLS握手过程详解
以下是 TLS握手过程的详细拆解,涵盖客户端与服务器之间的关键交互步骤,包括ClientHello、ServerHello、证书验证、密钥交换等核心阶段,并对比TLS 1.2与TLS 1.3的差异:
一、TLS握手的核心目标
- 协商协议版本:确定双方支持的TLS版本(如TLS 1.2或1.3)。
- 选择加密套件:确定对称加密算法(如AES-GCM)、密钥交换算法(如ECDHE)等。
- 交换密钥:通过非对称加密生成共享的对称密钥。
- 验证身份:服务器证明自身合法性,客户端可选验证(双向认证时)。
- 建立安全通道:后续数据通过对称加密传输。
二、TLS 1.3 握手流程(精简版)
TLS 1.3 标准化后,握手步骤从 两次RTT(Round-Trip Time)优化为一次RTT,并支持0-RTT握手。以下是详细步骤:
1. ClientHello(客户端问候)
• 发送内容:
• 支持的TLS版本(优先TLS 1.3)。
• 客户端随机数(Client Random,32字节)。
• 支持的加密套件列表(按优先级排序,如TLS_AES_256_GCM_SHA384
)。
• 支持的密钥交换算法(如ECDHE-ECDSA、X25519)。
• 扩展字段(如SNI、Session ID)。
• 目的:告知服务器客户端的支持能力,启动握手。
2. ServerHello(服务器响应)
• 发送内容:
• 确认的TLS版本(如TLS 1.3)。
• 服务器随机数(Server Random,32字节)。
• 选择的加密套件(如TLS_AES_128_GCM_SHA256
)。
• 选择的密钥交换算法(如ECDHE with X25519)。
• 扩展字段(如证书链、OCSP Stapling)。
• 目的:确认协议版本和加密参数,进入密钥交换阶段。
3. 证书交换
• 服务器发送证书链:
• 服务器证书(由中间CA签发)。
• 中间CA证书(根CA通常不发送,预装在客户端中)。
• 客户端验证证书:
• 检查证书链有效性(颁发机构、有效期、域名匹配)。
• 检查吊销状态(CRL或OCSP)。
• 验证证书签名(使用内置根CA公钥)。
4. 密钥交换(ECDHE)
• 步骤:
- 生成临时密钥对:客户端和服务器各自生成ECDHE临时密钥对(如X25519)。
- 交换公钥:客户端发送自己的临时公钥,服务器回复自己的临时公钥。
- 计算共享密钥:双方用对方的公钥和己方的私钥计算出相同的共享密钥(Pre-Master Secret)。
• 特点:
• 前向保密:即使长期私钥泄露,历史会话无法解密。
• 密钥长度短:X25519密钥仅需256位,安全性等效RSA 3072位。
5. 生成会话密钥
• 公式:
Master Secret = PRF(Pre-Master Secret, Client Random + Server Random)
• PRF
:伪随机函数(基于HMAC-SHA256)。
• 使用Client Random和Server Random生成主密钥(Master Secret)。
• 衍生对称密钥:
• 客户端写MAC密钥、服务器写MAC密钥。
• 客户端写加密密钥、服务器写加密密钥。
• 初始化向量(IV)等。
6. 完成握手(Finished)
• 双方发送Finished消息:
• 内容包含握手过程中所有消息的哈希值(使用Master Secret加密)。
• 验证握手过程的完整性和密钥正确性。
• 后续通信:使用对称加密算法(如AES-GCM)传输数据。
三、TLS 1.2 握手流程(对比)
TLS 1.2 握手需两次RTT,且密钥交换与身份验证耦合,步骤如下:
1. ClientHello
• 与TLS 1.3类似,但支持旧版加密套件(如RSA、RC4)。
2. ServerHello
• 选择加密套件(如TLS_RSA_WITH_AES_128_CBC_SHA
)。
3. 证书交换
• 同TLS 1.3。
4. 密钥交换(RSA)
• 步骤:
- 服务器发送RSA公钥。
- 客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送。
- 服务器用私钥解密,获取预主密钥。
• 缺陷:无前向保密,私钥泄露可解密历史会话。
5. 生成会话密钥
• 使用预主密钥和随机数生成主密钥,后续步骤同TLS 1.3。
四、关键安全机制
1. 证书验证
• 信任链:客户端验证证书是否由受信任根CA签发。
• 吊销检查:
• CRL(证书吊销列表):下载CA发布的吊销列表,检查证书序列号。
• OCSP(在线状态协议):实时查询证书状态。
• OCSP Stapling:服务器缓存OCSP响应,减少客户端延迟。
2. 密钥交换安全
• ECDHE:抗量子计算,支持前向保密。
• RSA密钥交换(已淘汰):易受中间人攻击,无前向保密。
五、TLS 1.3的改进与优势
特性 | TLS 1.2 | TLS 1.3 |
---|---|---|
握手延迟 | 两次RTT | 一次RTT(0-RTT可选) |
加密套件数量 | 多(含弱算法) | 精简(仅AEAD+现代算法) |
前向保密 | 可选(需ECDHE) | 强制支持 |
密钥导出 | PRF基于SHA-256 | HKDF,更安全 |
0-RTT握手 | 不支持 | 支持(需会话复用) |
六、实际应用与优化
-
服务器配置:
• 优先启用TLS 1.3,禁用弱密码套件(如RC4、SHA-1)。• 使用ECDSA证书(比RSA更短、更快)。
-
性能优化:
• 启用OCSP Stapling,减少证书验证延迟。• 使用Session Resumption(会话复用)减少握手开销。
-
安全加固:
• 强制HSTS头部,防止降级攻击。• 配置CSP(内容安全策略)防御XSS。
总结
TLS握手是HTTPS通信的核心,通过协商加密参数、验证身份、生成共享密钥,确保数据传输的机密性与完整性。TLS 1.3通过精简协议、强制前向保密和0-RTT握手,显著提升了安全性与性能,成为现代网站的标配。
相关文章:
【HTTPS基础概念与原理】TLS握手过程详解
以下是 TLS握手过程的详细拆解,涵盖客户端与服务器之间的关键交互步骤,包括ClientHello、ServerHello、证书验证、密钥交换等核心阶段,并对比TLS 1.2与TLS 1.3的差异: 一、TLS握手的核心目标 协商协议版本:确定双方支…...

从辅助到协作:GitHub Copilot的进化之路
如果说现代程序员的标配工具除了VS Code、Stack Overflow之外,还有谁能入选,那一定是GitHub Copilot。从2021年首次亮相,到如今深度集成进开发者日常流程,这个“AI编程助手”已经不只是写几行自动补全代码的小帮手了,而…...

Linux运行时的参数、命令、网络、磁盘参数和日志监控
一、监控 1. free 功能:用于查看系统内存使用情况,包括物理内存总量、已用内存、空闲内存、缓冲区(buffer)和缓存(cache)占用,以及交换内存(swap)的使用与剩余情况。常…...

鸿蒙页面布局入门
本文以仿猫眼电影M站首页布局为案例,展示ArkUI在实际开发中的应用。内容包括案例效果及相关知识点,深入解析布局框架以及头部、脚部、内容区域的构建思路与代码实现,最后提供完整代码和教程资源,助力你强化实践能力。 1. 案例效果…...
VTK|类似CloudCompare的比例尺实现2-vtk实现
文章目录 实现类头文件实现类源文件调用逻辑关键问题缩放限制问题投影模式项目git链接实现类头文件 以下是对你提供的 ScaleBarController.h 头文件添加详细注释后的版本,帮助你更清晰地理解每个成员和方法的用途,尤其是在 VTK 中的作用: #ifndef SCALEBARCONTROLLER_H #de…...

阿里巴巴开源移动端多模态LLM工具——MNN
MNN 是一个高效且轻量级的深度学习框架。它支持深度学习模型的推理和训练,并在设备端的推理和训练方面具有行业领先的性能。目前,MNN 已集成到阿里巴巴集团的 30 多个应用中,如淘宝、天猫、优酷、钉钉、闲鱼等,覆盖了直播、短视频…...

【漫话机器学习系列】256.用 k-NN 填补缺失值
用 k-NN 填补缺失值:原理、实现与应用 在实际的数据科学项目中,我们经常会遇到数据缺失(Missing Values)的问题。缺失值如果处理不当,不仅会影响模型训练,还可能导致最终结果偏差。 今天,我们…...
React组件(一):生命周期
文章目录 组件的生命周期生命周期的阶段1、组件创建阶段2、组件运行阶段3、组件销毁阶段 组件生命周期的执行顺序 组件的生命周期 在组件创建、到加载到页面上运行、以及组件被销毁的过程中,总是伴随着各种各样的事件,这些在组件特定时期,触…...

金格iWebOffice控件在新版谷歌Chrome中不能加载了怎么办?
金格iWebOffice控件是由江西金格网络科技有限责任公司开发的中间件软件,主要用于在浏览器中直接编辑Word、Excel、PowerPoint等Office文档,曾经是一款优秀国产的WebOffice插件。 由于2022年Chrome等浏览器取消支持PPAPI接口,导致这款金格iWe…...

实验6分类汇总
设计性实验 (1)查询每门课程的平均分,包括课程号和平均分。 SELECT Cno AS 课程号, AVG(Degree) AS 平均分 FROM Score065 GROUP BY Cno;(2)查询每门课程的平均分,包括课程号、课程名和平均分。 SELECT c.Cno AS 课程号, c.Cname AS 课程名, AVG(sc.Degree) AS 平均分 FROM …...

如何通过交流沟通实现闭环思考模式不断实现自身强效赋能-250517
感谢一直以来和我交流沟通的朋友们。 闭环思考 文字部分(25-05-04)这一天是青年节,在这一天与青年朋友交流这个是事先规划好的: “可以猜一猜,博士会被撤销吗?导师会被处理吗?千万不要回复,放心里,过段时间看结果,看看自己预估社会能力如何。 观察社会新闻,可以用…...

Python 3.11详细安装步骤(包含安装包)Python 3.11详细图文安装教程
文章目录 前言Python 3.11介绍Python 3.11安装包下载Python 3.11安装步骤 前言 作为当前最热门的编程语言之一,Python 3.11 不仅拥有简洁优雅的语法,还在性能上实现了飞跃,代码运行速度提升显著。无论是初入编程的小白,还是经验丰…...
[深度解析] 服务器内存(RAM)演进之路(2025):DDR5 vs HBM vs CXL 内存技术与选型指南
更多服务器知识,尽在hostol.com 嘿,各位服务器“发烧友”和技术决策者们!咱们在聊服务器配置的时候,CPU(大脑)、硬盘(仓库)、带宽(道路)这些“大件儿”总是备…...
C语言输入函数对比解析
目录 C语言输入函数全家福(和它们的秘密)fgetsgetsscanfgetcharfscanf函数对比表灵魂总结 哈哈,看来你正在和C语言的输入函数们玩“大家来找茬”!放心,我会用最接地气的方式给你讲明白,保证比看《甄嬛传》还…...
【Java-EE进阶】SpringBoot针对某个IP限流问题
目录 简介 1. 使用Guava的RateLimiter实现限流 添加Guava依赖 实现RateLimiter限流逻辑 限流管理类 控制器中应用限流逻辑 2. 使用计数器实现限流 限流管理类 控制器中应用限流逻辑 简介 针对某个IP进行限流以防止恶意点击是一种常见的反爬虫和防止DoS的措施。限流策…...

一个指令,让任意 AI 快速生成思维导图
大家好,我是安仔,一个每天都在压榨 AI 的躺平打工人。 今天分享一个 AI 办公小技巧,让你用一个指令让 AI 生成思维导图。 DeepSeek、Kimi、豆包都可以哈 ~ KimiXMind 安仔经常用 XMind 来绘制思维导图,但是 AI 是没…...
随言随语(十二):盖章
给自己的机器学习生涯做个总结盖个章,讲述下如何跟机器学习擦肩而过的,鉴于当前深度学习和大模型已经走出来的路及理论知识的入门难度,可能以后跟机器学习前沿科技就再没有交集了; 最近也看了马占凯的《ChatGPT:人类新…...

FPGA图像处理(六)------ 图像腐蚀and图像膨胀
默认迭代次数为1,只进行一次腐蚀、膨胀 一、图像腐蚀 1.相关定义 2.图像腐蚀效果图 3.fpga实现 彩色图像灰度化,灰度图像二值化,图像缓存生成滤波模块(3*3),图像腐蚀算法 timescale 1ns / 1ps // // Des…...
Spring三级缓存的作用与原理详解
在Spring框架中,Bean的创建过程涉及到了三级缓存机制。这个机制主要是为了提高单例模式下bean实例化和依赖注入的效率。本文将深入探讨Spring中的三级缓存,以及其在bean生命周期中的重要作用。 首先,让我们理解什么是三级缓存。Spring中的三…...

LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)
本节讲解Ultrascale IDELAYE3的参数; IDELAYE3参数: REFCLK_FREQUENCY:如果使用COUNT模式,保持300MHz的默认值即可; 如果使用TIME模式,则该值与IDELAYCTRL参考时钟要匹配; DELAY_SRC&#…...

ARM (Attention Refinement Module)
ARM模块【来源于BiSeNet】:细化特征图的注意力,增强重要特征并抑制不重要的特征。 Attention Refinement Module (ARM) 详解 ARM (Attention Refinement Module) 是 BiSeNet 中用于增强特征表示的关键模块,它通过注意力机制来细化特征图&…...

国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)
文章目录 主要更新内容项目介绍功能思维导图设计器流程图演示地址官网Warm-Flow视频 主要更新内容 [feat] 开启流程实例,新增流程定义是否存在校验[feat] 新增合同签订流程案例[feat] 新增企业采购流程案例[update] mybatis-plus逻辑删除,删除值和未删除…...

前端二进制数据指南:从 ArrayBuffer 到高级流处理
前端开发中,二进制数据是处理文件、图像、音视频、网络通信等场景的基础。以下是核心概念和用途的通俗解释: 前端二进制数据介绍 1. 什么是前端二进制数据? 指计算机原始的 0 和 1 格式的数据(比如一张图片的底层代码ÿ…...

如何选择高性价比的 1T 服务器租用服务
选择高性价比的 1T 服务器租用服务,可参考以下内容: 1、根据需求选配置 明确自身业务需求是关键。若为小型网站或轻量级应用,数据存储与处理需求不高,选择基础配置服务器即可。如个人博客网站,普通的 Intel Xeon …...

一个可拖拉实现列表排序的WPF开源控件
从零学习构建一个完整的系统 推荐一个可通过拖拉,来实现列表元素的排序的WPF控件。 项目简介 gong-wpf-dragdrop是一个开源的.NET项目,用于在WPF应用程序中实现拖放功能,可以让开发人员快速、简单的实现拖放的操作功能。 可以在同一控件内…...

AI-02a5a6.神经网络-与学习相关的技巧-批量归一化
批量归一化 Batch Normalization 设置合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利的进行学习。那么,更进一步,强制性的调整激活值的分布,是的各层拥有适当的广度呢?批量归一化&#…...

SVGPlay:一次 CodeBuddy 主动构建的动画工具之旅
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 背景与想法 我一直对 SVG 图标的动画处理有浓厚兴趣,特别是描边、渐变、交互等效果能为图标增添许…...

自己手写tomcat项目
一:Servlet的原理 在Servlet(接口中)有: 1.init():初始化servlet 2.getServletConfig():获取当前servlet的配置信息 3.service():服务器(在HttpServlet中实现,目的是为了更好的匹配http的请求方式) 4.g…...

2025年渗透测试面试题总结-安恒[实习]安全工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 安恒[实习]安全工程师 一面 1. 自我介绍 2. 前两段实习做了些什么 3. 中等难度的算法题 4. Java的C…...
生成对抗网络(Generative Adversarial Networks ,GAN)
生成对抗网络是深度学习领域最具革命性的生成模型之一。 一 GAN框架 1.1组成 构造生成器(G)与判别器(D)进行动态对抗,实现数据的无监督生成。 G(造假者):接收噪声 ,…...