HTTP/HTTPS ⑤-CA证书 || 中间人攻击 || SSL/TLS
这里是Themberfue
✨上节课我们聊到了对称加密和非对称加密,实际上,单纯地非对称加密并不能保证数据不被窃取,我们还需要一个更加重要的东西——证书
中间人攻击
- 通过非对称加密生成私钥priKey和公钥pubKey用来加密对称加密生成的密钥,确实可以有效的对数据的传输进行保护,但其中还存在一个非常严重的漏洞。
- ✨中间人攻击(Man-In-The-Middle Attack,MITM) 是一种网络攻击形式,攻击者通过拦截和篡改两方通信内容,冒充通信的某一方与另一方对话,从而获取敏感信息或进行恶意操作。整个过程通常对通信双方是不可见的,因此具有很大的隐蔽性。
- 中间人攻击通常冒充双方之一:假装是服务器与客户端通信、假装是客户端与服务器通信,攻击者在通信中插入、修改或窃取数据,而通信双方误以为彼此直接对话。
- 中间人攻击的常见手段有很多种,这里我们只讲其中的一种:通过特殊手段拿到加密的密钥。
- ✨客户端服务端通信前,客户端向服务端请求获得 公钥pub1,服务端接受请求返回 公钥pub1,此时黑客拦截到响应,但黑客自己又生成了一对 公钥pub2 和 私钥pri2,黑客伪造响应数据包将 公钥pub2 返回客户端,客户端没有能力辨别该公钥的真假,便直接拿来用了,随后将客户端生成的 密钥key 使用 公钥pub2 进行加密,随后再度发送请求给服务端,此时又被黑客拦截了,黑客将使用 私钥pri2 对通过 公钥pub2 加密的 密钥 key 进行解密,从而得到 密钥key,随后再使用 公钥pub1 再度对该 密钥key 加密并伪造请求数据包发送给服务端,服务端得到之后使用 私钥pri1 进行解密得到密钥key,此时服务端也不会有所怀疑。在整个过程中,服务端和客户端根本不知道它们的通信还有一个中间人黑客进行篡改,密钥key 就这样被拿到了,往后的通信都会被破解。
- 如果依然有点模糊,这边还有一个比喻,希望可以加深理解:❤️假设你在咖啡馆里,想给朋友发一封信。你把信交给服务员,请他送到朋友手中。然而,服务员偷偷打开信,读了内容,还伪造了一份不同的回复信交给你。你以为在和朋友直接通信,但实际上服务员(中间人)在整个过程中窃取并操控了你的信息。
- ✨✨✨防御中间人攻击的关键在于:确保通信双方能够相互验证身份,并通过加密保护通信数据的完整性和机密性。
CA证书
- ✨上述提到的中间人攻击,关键就在于服务端和客户端不知道对方的身份是否正确,所以,引入校验机制以检验对方的身份是否合法,通常校验客户端请求服务器的公钥是否被中间人修改过。
- 如何验证,就是验证 "证书"。CA证书(Certificate Authority Certificate)是由证书颁发机构(CA)签发的电子文件,用于在网络通信中证明服务器或客户端的身份,并帮助建立安全的通信。CA 证书是 HTTPS 和其他加密协议的重要组成部分。
证书的组成
证书持有者信息
- 持有者名称(通常是域名)。
- 组织信息(如公司名、地点)。
CA 信息
- 签发证书的证书颁发机构名称。
公钥
- 用于加密通信的公钥。
证书序列号
- 证书的唯一标识。
有效期
- 证书的开始时间和到期时间。
签名算法
- 用于签名的哈希算法(如 SHA256)。
数字签名
- 由 CA 对证书内容进行签名,确保证书未被篡改。
- ✨在正式对广大客户端提供前,服务器先向第三方权威认证机构申请颁发一个证书,通过提交一些服务器的域名、公钥等信息,随后机构颁发一个数字证书,证书的组成如上;证书的内容会被签名算法算出一个校验和,随后机构这边也会有一对公钥pub2和私钥pri2,私钥pub2用于加密先前求出的校验和,得到数字签名;校验和通常与内容有关,若内容相同,得到的校验和一定相同,若内容不相同,得到的校验和大概率不同,这和hash函数有一定的类似。
- ✨在客户端和服务器通信时,客户端会先向服务器请求其的证书,客户端得到证书后,对证书上述的组成内容使用相同的签名算法算出一个新的校验和,随后使用第三方权威认证机构生成的公钥pub2对数字签名进行解密得到服务器那边原始的校验和,将原始的校验和与客户端新算出的校验和进行比对,如果相同,则表明内容没有被篡改,不存在中间人拦截,如果不同,则表明内容被篡改,存在中间人拦截,立刻停止通信。
- ❓看到这里,你或许会有点疑问,在这个过程中,怎么就保证内容一定没被修改了;别急,且听我一一道来。
- 💎黑客会不会对公钥pub2进行修改,中间人攻击那样故技重施。答案是不会的,因为公钥pub2就不是通过网络传输的,而是操作系统内置的,你当然也可以查看自己操作系统内置的一些第三方机构。输入win+R,输入certmgr.msc后可以直接查看、打开控制面板,找到Internet选项,有一个内容tab栏,点击证书按钮便可查看。
- 💎这些第三方生成的公钥pub2黑客当然也可以看到,但是只能看不能修改,无可奈何。除非你安装的操作系统不是正版,而是黑客魔改的,那当我没说。
- 💎黑客可以自己申请或者伪造一个证书然后替换吗?确实可以申请或者伪造,但是证书的内容通常有许多唯一标识,标志着该证书的唯一性,就比如域名,黑客申请的域名的正规服务器的域名肯定不能相同,第三方机构肯定能知道你这个域名冲突了,那如果是黑客自己伪造的证书,这当然不需要通过第三方机构,但这也并不行,因为数字签名是通过第三方机构生成的私钥pri2加密的,如果黑客使用了自己的私钥加密,那么客户端使用第三方机构生成的公钥pub2解密时,就会解密失败,从而中断通信。
- 💎如果黑客修改证书内容呢?那也一样,同样需要在修改完后使用第三方机构的私钥pri2加密,否则客户端就会解密失败。那黑客能拿到私钥pri2,要真能拿到,那也是厉害,这是真厉害,没得黑🫡。
- 我们也可以通过浏览器查看你当前访问网站的一些证书信息,在域名左侧有个锁的图标就可以查看
- 如果你访问的网站的证书是不合法的,浏览器通常会警告你,查询你是否继续访问还是退出该网页。经常网上冲浪的应该对这个不陌生。面对这种情况,还是建议不要无视风险,继续安装了。
SSL/TLS
- ✨SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络安全协议,用于在客户端和服务器之间建立安全加密的通信通道。它们在保护数据传输的机密性、完整性和身份验证方面发挥关键作用。
SSL 和 TLS 的关系
- SSL 是最初由 Netscape (网景) 开发的安全协议。
- TLS 是 SSL 的继任者,属于更安全的版本。
- SSL 3.0 是最后一个 SSL 版本,之后改进的版本被命名为 TLS 1.0。
- 当前(截至 2025 年)推荐使用的是 TLS 1.2 或 TLS 1.3,SSL 以及 TLS 1.0/1.1 已被淘汰。
SSL/TLS 的核心功能
数据加密:
- 通过对称加密保证数据传输的机密性。
- 防止传输中的数据被窃听。
数据完整性:
- 使用消息摘要(如 HMAC)防止数据被篡改。
- 如果数据被修改,接收方会发现并丢弃。
身份验证:
- 使用数字证书验证服务器身份。
- 可选:客户端身份验证(如双向认证)。
SSL/TLS 的工作流程
1. 握手阶段(Handshake)
- 建立安全连接的过程,包括协商加密算法、验证身份和生成密钥。
主要步骤:
客户端 Hello
- 客户端向服务器发送支持的 TLS 版本、加密套件、随机数等信息。
服务器 Hello
- 服务器响应,确认使用的 TLS 版本、加密算法等,并发送服务器证书。
服务器证书验证
- 客户端验证服务器证书的有效性,包括是否由受信任的 CA 签发、是否过期等。
密钥交换
- 双方通过密钥交换算法(如 Diffie-Hellman 或 RSA)协商生成会话密钥。
- TLS 1.3 直接采用预共享密钥(PSK)或密钥交换,跳过部分步骤。
完成握手
- 客户端和服务器通过对称加密会话密钥,开始加密通信。
2. 加密通信阶段
- 使用会话密钥对数据进行加密,保证传输的安全性。
3. 连接关闭阶段
- 使用 TLS 关闭机制,确保剩余数据完整传输并正确断开连接。
主要特性
向后兼容性:
- 允许客户端和服务器协商最低的 SSL/TLS 版本。
加密算法灵活性:
- 支持多种加密算法(如 AES、ChaCha20),并根据安全性逐步淘汰不安全的算法。
支持扩展:
- 如 ALPN(应用层协议协商)支持 HTTP/2。
TLS 1.3 的改进
简化握手:
- 减少握手过程中的往返次数(从两次减少到一次)。
- 更快的连接建立速度。
更强的安全性:
- 移除弱加密算法和协议(如 RSA 和 MD5)。
- 默认启用前向保密(Perfect Forward Secrecy,PFS)。
效率提升:
- 提供 0-RTT(零延迟握手)机制,加速后续连接。
SSL/TLS 的典型应用场景
HTTPS(HTTP over TLS):
- 为网站提供安全加密通信。
邮件传输:
- 如 SMTPS、IMAPS。
虚拟专用网络(VPN):
- 如 OpenVPN 使用 TLS 进行隧道加密。
实时通信:
- WebRTC 中的加密。
常见的挑战与问题
性能开销:
- TLS 加密和握手过程增加了 CPU 和带宽开销。
- 解决:启用硬件加速(如 AES-NI)、使用更高效的协议(如 TLS 1.3)。
证书管理复杂性:
- 证书需要定期更新、配置和管理。
攻击风险:
- 如中间人攻击(MITM)、TLS 降级攻击(POODLE)等。
- 解决:强制使用最新版本的 TLS,启用 HSTS。
总结
SSL/TLS 是保障互联网安全的重要基石,通过加密、验证和完整性检查,确保数据安全传输。随着 TLS 的不断发展(特别是 TLS 1.3 的普及),性能和安全性得到了进一步提升。理解其原理有助于更好地设计和保护网络应用。
- 至此,HTTP/HTTPS 协议的相关内容就已经全部讲完了,如有遗漏,私信我~~~
- 下一节,我们将进入传输层 UDP/TCP 协议的讲解,大家敬请期待哦~~~
- 毕竟不知后事如何,且听下回分解
- ❤️❤️❤️❤️❤️❤️❤️
相关文章:

HTTP/HTTPS ⑤-CA证书 || 中间人攻击 || SSL/TLS
这里是Themberfue ✨上节课我们聊到了对称加密和非对称加密,实际上,单纯地非对称加密并不能保证数据不被窃取,我们还需要一个更加重要的东西——证书 中间人攻击 通过非对称加密生成私钥priKey和公钥pubKey用来加密对称加密生成的密钥&…...

traceroute原理探究
文章中有截图,看不清的话,可以把浏览器显示比例放大到200%后观看。 linux下traceroute的原理 本文通过抓包观察一下linux下traceroute的原理 环境:一台嵌入式linux设备,内网ip是192.168.186.195,其上有192.168.202.…...
50_Lua垃圾回收
1.Lua垃圾回收机制概述 Lua采用了一种自动内存管理机制,称为垃圾回收(Garbage Collection, GC)。垃圾回收的主要目的是回收程序中不再被使用的内存,从而避免内存泄漏。Lua的垃圾回收器负责回收动态分配的对象,如函数、用户数据、表、字符串、线程、内部结构等。Lua的垃圾…...

Git-2-:Cherry-Pick 的使用场景及使用流程
前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能,Cherry-Pick不是merge,只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介: git cherry-pick 是用来从一个分…...

【C++】21.map和set的使用
文章目录 1. 序列式容器和关联式容器2. set系列的使用2.1 set和multiset参考文档2.2 set类的介绍2.3 set的构造和迭代器构造函数:双向迭代器迭代器: 2.4 set的增删查2.5 insert和迭代器遍历使用样例:2.6 find和erase使用样例:2.7 …...

burpsiute的基础使用(2)
爆破模块(intruder): csrf请求伪造访问(模拟攻击): 方法一: 通过burp将修改,删除等行为的数据包压缩成一个可访问链接,通过本地浏览器访问(该浏览器用户处于登陆状态&a…...
ElasticSearch 同义词匹配
synonym.txt 电脑, 计算机, 主机 复印纸, 打印纸, A4纸, 纸, A3 平板电脑, Pad DELETE /es_sku_index_20_20250109 PUT /es_sku_index_20_20250109 {"settings": {"index": {"number_of_shards": "5","number_of_replicas&quo…...

linux RT-Preempt spin lock实现
一、spin_lock概述 Spinlock是linux内核中常用的一种互斥锁机制,和mutex不同,当无法持锁进入临界区的时候,当前执行线索不会阻塞,而是不断的自旋等待该锁释放。正因为如此,自旋锁也是可以用在中断上下文的。也正是因为…...
PySpark广播表连接解决数据倾斜的完整案例
使用PySpark解决数据倾斜问题的完整案例,通过广播表连接的方式来优化性能。 准备数据 假设我们有两张表,一张大表 big_table 和一张小表 small_table ,小表将作为广播表。 from pyspark.sql import SparkSession# 初始化SparkSession spar…...

Chromium CDP 开发(十二):为自己的Domain建立custom_config.json
引言 本章详细介绍了如何为自定义的 CDP Domain 创建 custom_config.json 文件,并通过修改 BUILD.gn 文件来确保自定义的配置文件参与编译。我们通过 inspector_protocol_generate 配置段自动生成自定义 Domain 的头文件和实现文件,并成功将其集成到构建…...

【Vue】全局/局部组件使用流程(Vue2为例)
全局组件和局部组件区别 如何使用 全局组件:全局注册后,可以在任意页面中直接使用。局部组件:在页面中需要先导入子组件路径,注册组件才能使用。 适用场景 全局组件:适用于高频使用的组件,如导航栏、业…...
Vue.js组件开发详解
在现代前端开发中,Vue.js 凭借其简洁、高效、灵活的特性,成为了众多开发者的首选框架之一,而组件化开发则是 Vue.js 的核心优势。组件可以将复杂的 UI 界面拆分成一个个独立的、可复用的小块,极大地提高了开发效率和代码的可维护性…...

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎…...
深度学习camp-第J7周:对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 📌你需要解决的疑问:这个代码是否有错?对错与否都请给出你的思考 📌打卡要求:请查找相关资料、逐步…...
java: 错误: 无效的源发行版:17解决办法
遇到“java: 错误: 无效的源发行版:17”的问题,通常是因为项目设置中指定的Java版本与当前环境不一致导致的。以下是几种可能的解决方案: 检查并升级Java版本:确保你已经安装了支持Java 17的JDK版本。你可以通过命令行输入java -v…...

Docker 安装开源的IT资产管理系统Snipe-IT
一、安装 1、创建docker-compose.yaml version: 3services:snipeit:container_name: snipeitimage: snipe/snipe-it:v6.1.2restart: alwaysports:- "8000:80"volumes:- ./logs:/var/www/html/storage/logsdepends_on:- mysqlenv_file:- .env.dockernetworks:- snip…...
Go语言封装加解密包(AES/DES/RSA)
Go语言封装加解密包(AES/DES/RSA) 1. Base64编码与解码2. AES加解密3. DES加解密4. RSA加解密5. SHA256哈希6. 单元测试1. AES加解密单元测试2. DES加解密单元测试3. RSA加解密单元测试4. SHA256哈希单元测试测试用例说明 总结 在现代软件开发中…...
sql server 对 nvarchar 类型的列进行 SUM() 运算
因为 SUM() 是一个数值聚合函数,不能直接应用于字符串类型的数据。为了正确汇总标准数量,你需要确保该列的数据类型是数值类型,如 int、decimal 或 float。 假设要统计数量列的和,由于数量列是 nvarchar 类型,你需要先…...
java中json字符串键值获取
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version> </dependency>使用fastjson依赖 JSONObject jsonObject JSON.parseObject(s); 这个jsonObject本质就是一个map&…...

MPLS原理及配置
赶时间可以只看实验部分 由来:90年代中期,互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发,但由于硬件技术存在限制导致转发性能低,查表转发成为了网络数据转发的瓶颈。 因此,旨在提高路由器转发速度的MPL…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...