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

抽象的https原理简介

前言

小明和小美是一对好朋友,他们分隔两地,平时经常写信沟通,但是偶然被小明发现他回给小美的信好像被人拆开看过,甚至偷偷被篡改过。

对称加密算法

开头的通信过程比较像HTTP服务器与客户端的通信过程,全明文传输,第三方比较容易在传输线路的任何节点上抓包获取到传输内容,甚至篡改。

遇到这种事情,小明立刻就想到了要把写信的内容加密再传输,这样就安全了,常见的对称加密算法有好多种:AES、DES、ChaCha20等,他们的共同特点就是加密解密用的是同一个密钥。

剩下的就是得把加密写信的想法以及密钥告诉小美了,但这里就尴尬了,因为小明和小美只能写信沟通,如果小明把密钥放信里寄过去,哪个邪恶的邮递员拆开看了,那么也就拿到了密钥,后续的所有信件他都可以解密查看甚至一样可以篡改。

非对称加密算法

小明意识到只用这种对称加密算法是行不通的,但是聪明的小明马上就想到了可以用非对称加密算法,常见的非对称加密算法:RSA、DSA等,他们的共同特点就是加密解密用的是不同的密钥,俗称公钥和私钥。

公钥加密的内容,只有私钥可以解密出来,私钥加密的内容,也只有公钥可以解密出来。但是这种加密算法很复杂,加解密效率很低,特别是加密内容很长的时候,所以不能用非对称加密算法加密整个信件内容,于是想到让小美每次回信都生成随机的对称密钥,非对称加密算法只用来加解密这个比较短的对称密钥,加解密信件内容还是用效率比较高的对称加密算法。

虽然开始有点绕了,但是这也难不倒小明,他立刻生成了一对公私钥,私钥自己留着,公钥写信寄给小美,并且告诉小美让她随机生成一个对称加密算法密钥,信件内容用这个对称加密算法加密,然后密钥本身再用公钥加密,一起写回信寄回来。

邪恶的邮递员小黑再次截获到了这封信,拆开一看马上就意识到不妙,这封信一旦寄到小美手中,小美按照信中提到的方案加密回信的话,那么世界上就只有具有私钥的小明能解密看懂信件了,这可不行,所以小黑一不做二不休直接自己生成了一对公私钥对,拿自己的公钥替换掉了这封信里的公钥,然后寄给小美。

小美也确实按照这套加密方案加密回信了,但是用的是小黑替换过的公钥,所以小黑可以用他的私钥解密成功了,但是这样的回信肯定不能直接转给小明了,因为公钥被换过小明是解不了的,所以小黑再用之前小明的公钥加密 他已经解密后的内容,再寄给小明,虽然来回的加解密很麻烦,但是总算神不知鬼不觉的完成了信息截获。

数字证书

小明也是马上意识到了这其中的漏洞,冥思苦想还是觉得这个公私钥对不能由自己生成,自己生成的公钥小美完全没办法判断是不是真的。
这时一个权威的第三方大佬大壮出现了,小明可以去大壮那里申请公私钥对,但是这个公钥就不是单纯的公钥了,而是放在一个叫做数字证书的函件里面,函件的内容包含以下信息:

  1. 公钥
  2. 证书归属者:小明
  3. 证书签发者:大壮
  4. 证书有效期:2025-04-18 ~ 2025-07-19
  5. 证书签名:以上信息哈希摘要后,用大壮的顶级私钥加密生成的

以上4个信息打包放一起,称之为数字证书。
但是大壮又是如何保证数字证书里的公钥不能被替换呢?这里就的得证书里的签名,以及大壮大佬的身份了,大壮和所有的房地产开发商都是合作关系,所有房屋建造完后都内置了大壮的顶级证书,里面包含了大壮的顶级公钥。

之后小明写信直接把从大壮那申请的数字证书带上,同样是要求小美用上一节的方案生成密钥加密传输。这时邪恶的小黑同样拦截到了这封信,并且把证书里的公钥换掉了,再发给小美,小美拆开信首先做的就是把数字证书拿出来,把前三个信息:公钥、证书归属者、证书签发者哈希摘要,然后拿出证书签名用自己家里内置的顶级公钥解密这个签名也得到了一个哈希摘要值,对比两个值居然不一样!说明证书已经被人篡改了,说明有内鬼交易终止!

虽然小黑也可以去大壮那里申请数字证书,但是拿到的数字证书证书归属者会写着小黑,这样就算替换证书,小美一眼就看出来这不是小明的证书了。

至此小黑再也没法偷看小明小美之间的信件了,除非他直接冲到小美家里把她家内置的顶级公钥给换了,或者直接去把大壮的顶级私钥搞到手,当然他是没这个胆子和能力的。

证书链

大壮的证书签发生意做的红红火火,越来越多的人找大壮签发证书,但是大壮一个人有点力不从心,毕竟签发证书用的私钥让任何其他人帮忙都很危险,一旦他的顶级私钥泄露,他的生意就完蛋了。这里就体现出了基于根证书签发下级证书的局限性:

  1. 经常拿着顶级私钥去签发下级证书,难免会出意外被人偷走,最好锁起来不要经常拿出来
  2. 需要证书的人太多了,大壮帮不过来

所以大壮想到一个方案,找到一个可以信赖的伙伴大强,只需要签发一个中间证书和中间私钥给大强,证书包含以下信息:

  1. 中间证书公钥
  2. 证书归属者:大强
  3. 证书签发者:大壮
  4. 证书有效期:2025-04-18 ~ 2099-12-31
  5. 证书权限:签发写信证书
  6. 证书签名:以上信息哈希摘要后,用大壮的顶级私钥加密生成的

大强拿着这个中间证书开办了一家新的证书签发机构,又可以签发下级证书了,但是他签发的下级证书跟大壮签发的不太一样,他签发的证书实际会包含两个证书,类似以下内容:

=======证书开始=======
1. 中间证书公钥
2. 证书归属者:大强
3. 证书签发者:大壮
4. 证书有效期:2025-04-18 ~ 2099-12-31
5. 证书权限:签发写信证书
6. 证书签名:以上信息哈希摘要后,用大壮的顶级私钥加密生成的
=======证书结束==============证书开始=======
1. 写信公钥
2. 证书归属者:小明
3. 证书签发者:大强
4. 证书有效期:2025-04-18 ~ 2025-12-31
5. 证书权限:仅用于写信
6. 证书签名:以上信息哈希摘要后,用大强的私钥加密生成的
=======证书结束=======

这回小美收到信,拿到这个证书就需要先校验最后这个证书,这个证书可信后,根据证书签发者:大强,找到上级证书再用家里的顶级公钥校验这个上级证书,如果也可信,就算是整个证书链都可信了。

之所以证书信息里有个证书权限信息,就是为了防止一些只用来写信的证书,被人拿来签发下级证书。基于这个原理甚至可以签发下级中间证书,形成好几个证书串联起来的证书链。

至此大壮终于可以躺平赚钱了。。。

相关文章:

抽象的https原理简介

前言 小明和小美是一对好朋友,他们分隔两地,平时经常写信沟通,但是偶然被小明发现他回给小美的信好像被人拆开看过,甚至偷偷被篡改过。 对称加密算法 开头的通信过程比较像HTTP服务器与客户端的通信过程,全明文传输…...

HTML理论题

1.什么是HTML? 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 2.DOCTYPE 的作用是什么?标准与兼容模式(混杂模式)各有什么区别? DOCTYPE 的作用是告知浏览器的解析器用什么文档标准解析这个文档。 标准模式:用于…...

nginx-基础知识(二)

目录 虚拟主机 虚拟主机的功能 虚拟主机的划分方式 基于IP地址进行划分 基于域名进行划分 正向/反向代理 正向代理 反向代理 正向代理和反向代理的区别 负载均衡 负载均衡的类型 负载均衡的作用 nginx并发量比较高的原因 负载均衡的算法 会话保持 虚拟主机 虚拟…...

Ubuntu上安装Mysql

步骤 1:安装 MySQL Server sudo apt update sudo apt install mysql-server -y这将安装最新版本的 MySQL 8.0 以及所有依赖组件。 步骤 2:检查安装是否成功 mysql --version sudo systemctl status mysql如果状态是 active (running),说明成…...

idea maven 命令后控制台乱码

首先在idea中查看maven的编码方式 执行mvn -v命令 查看编码语言是GBK C:\Users\13488>mvn -v Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: D:\maven\apache-maven-3.6.3\bin\.. Java version: 1.8.0_202, vendor: Oracle Corporation, runt…...

C# dll 打包进exe

Framework4.x推荐使用 Costura.Fody 1. 安装 NuGet 包 Install-Package Costura.Fody工程自动生成packages文件夹,300M左右。生成FodyWeavers.xml、FodyWeavers.xsd文件。 2. 自动嵌入 编译后,所有依赖的 DLL 会被自动嵌入到 EXE 中。 运行时自动解压…...

【数据融合实战手册·实战篇】二维赋能三维的5种高阶玩法:手把手教你用Mapmost打造智慧城市标杆案例

在当今数字化时代,二三维数据融合技术的重要性不言而喻。二三维数据融合通过整合二维数据的结构化优势与三维数据的直观性,打破了传统数据在表达和分析上的局限,为各行业提供了更全面、精准的数据分析手段。从智慧城市建设到工业智能制造&…...

ValueError: model.embed_tokens.weight doesn‘t have any device set

ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …...

解决:QTcpSocket: No such file or directory

项目场景: 使用QTcpSocket进行网络编程: 调用connectToHost连接服务器,调用waitForConnected判断是否连接成功,连接信号readyRead槽函数,异步读取数据,调用waitForReadyRead,阻塞读取数据。 问题描述 找不…...

六、LangChain Agent 最佳实践

1. 架构设计与组件选择 (1) 核心组件分层设计 Model(LLM驱动层) 生产环境推荐:使用 gpt-4-1106-preview 或 Anthropic Claude 3 等高性能模型,结合 model.with_fallbacks() 实现故障转移(如备用模型或本地模型)。本地部署:选择 Llama3-70B 等开源模型,搭配 Docker 或 …...

uni-app 安卓10以上上传原图解决方案

在Android 10及以上版本中,由于系统对文件访问的限制,使用chooseImage并勾选原图上传后,返回的是图片的外部存储路径,如:file:///storage/emulated/0/DCIM/Camera/。这种外部存储路径,无法直接转换成所需要…...

Python爬虫实战: 有道翻译

一、引言 在全球化进程不断加速的当下,语言交流的需求日益增长,翻译服务的重要性愈发凸显。有道翻译作为一款备受欢迎的在线翻译工具,其蕴含的数据具有极高的价值,可广泛应用于自然语言处理研究、翻译教学以及语言学习软件的开发等领域。 然而,为保护自身数据资源和网络安…...

CSS 文件格式

A QFrame#andrFrm[status"android_en"] A:表示父类或顶层窗口的类型。如果 A 是一个自定义的类名,确保该类已经正确注册到 Qt 系统中。QFrame:表示具体的控件类型。#andrFrm:表示控件的对象名称(通过 setOb…...

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

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

3.Chromium指纹浏览器开发教程之chromium119版本源码拉取

获取Chromium最新版源码 Git是一个分布式版本控制系统,用于管理代码的版本和协作开发,它是目前最流行和广泛使用的版本控制系统之一。在Chromium项目中,通常使用gclient来获取Chromium的源代码,并使用Git来对代码进行版本控制和管…...

使用Jasypt对配置文件内容加密

使用Jasypt 配置文件内容加密 一、背景 在软件开发过程中,配置文件扮演着至关重要的角色,它存储着应用程序运行所需的各种参数和设置,例如数据库连接信息、API 密钥、第三方服务的认证信息等。然而,这些配置文件中的信息往往包含…...

《Spring Boot 测试框架指南:@SpringBootTest与Mockito的最佳实践》

大家好呀!👋 今天我要和大家聊聊Spring Boot测试的那些事儿。作为一名Java开发者,写代码很重要,但写测试同样重要!💯 想象一下,你建了一座漂亮的房子🏠,但如果没有质量检…...

【计算机视觉】OpenCV项目实战- Artificial-Eyeliner 人脸眼线检测

Artificial-Eyeliner 人脸眼线检测 项目介绍运行方式运行步骤常见问题及解决方法1. dlib 安装失败其他注意事项 2. 缺少 make / gcc3. **依赖库安装问题**:4. *人脸关键点检测失败:5. 眼线效果不理想:6. 实时处理延迟:7. 保存文件…...

工作总结(十二)——迁移svn单项目到gitlab上,保留历史提交记录

文章目录 前言一、目的二、操作步骤1.创建项目库2.复制历史提交者账号3.复制待迁移项目以及历史记录4.push到gitlab远程仓库 总结 前言 本系列文章主要记录工作中一些需要记录的内容 一、目的 因为一些原因,我需要将svn库上的某个项目迁移到公司的gitlab库管理平台…...

Flash存储器(二):SPI NAND Flash与SPI NOR Flash

目录 一.存储架构 二.接口与封装 三.特性对比 四.典型应用场景 4.1 SPI NOR Flash 4.2 SPI NAND Flash 五.技术演进与市场趋势 六.选择建议 6.1 选择SPI NOR的场景 6.2 选择SPI NAND的场景 SPI NAND Flash和SPI NOR Flash是嵌入式设备中常用的存储器。下面通过全面对…...

Git Flow

Git Flow深度解析:企业级分支管理实战指南 前言 在持续交付时代,分支策略决定团队协作效率。Git Flow作为经典的分支管理模型,被Apache、Spring等知名项目采用。2023年JetBrains开发者调查报告显示,Git Flow仍是中大型项目最常用…...

吃透LangChain(五):多模态输入与自定义输出

多模态数据输入 这里我们演示如何将多模态输入直接传递给模型。我们目前期望所有输入都以与OpenAl 期望的格式相同的格式传递。对于支持多模态输入的其他模型提供者,我们在类中添加了逻辑以转换为预期格式。 在这个例子中,我们将要求模型描述一幅图像。 …...

C++ `unique_ptr` 多线程使用

C unique_ptr 多线程使用 一、核心结论 操作同一个 unique_ptr:必须加锁(所有权转移是非原子操作)访问被管理对象:若对象非线程安全,仍需额外同步独立 unique_ptr 实例:不同线程操作不同实例时无需加锁 二…...

Flink介绍——实时计算核心论文之Kafka论文详解

引入 我们通过S4和Storm论文的以下文章,已经对S4和Storm有了不错的认识: S4论文详解S4论文总结Storm论文详解Storm论文总结 不过,在讲解这两篇论文的时候,我们其实没有去搞清楚对应的流式数据是从哪里来的。虽然S4里有Keyless …...

MQTTClient.c的线程模型与异步事件驱动

MQTTClient.c的线程模型与异步事件驱动 1. 多线程架构设计 MQTTClient.c通过分离网络I/O和用户逻辑线程实现异步通信,核心设计如下: sequenceDiagramparticipant 主线程 as 主线程(用户调用)participant 发送队列 as 发送队列pa…...

《Learning Langchain》阅读笔记3-基于 Gemini 的 Langchain如何从LLMs中获取特定格式

纯文本输出是有用的,但在某些情况下,我们需要 LLM 生成结构化输出,即以机器可读格式(如 JSON、XML 或 CSV)或甚至以编程语言(如 Python 或 JavaScript)生成的输出。当我们打算将该输出传递给其他…...

AI Agents系列之构建多智能体系统

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...

OJ笔试强训_1至24天

OJ笔试强训 Day01 [NOIP2010]数字统计_牛客题霸_牛客网 点击消除_牛客题霸_牛客网 两个数组的交集_牛客题霸_牛客网 Day02 牛牛的快递_牛客题霸_牛客网 最小花费爬楼梯_牛客题霸_牛客网 数组中两个字符串的最小距离__牛客网 Day03 简写单词_牛客题霸_牛客网 dd爱框框_…...

3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?

这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…...

java IO/NIO/AIO

(✪▽✪)曼波~~~~!让曼波用最可爱的赛马娘方式给你讲解吧!(⁄ ⁄•⁄ω⁄•⁄ ⁄) 🎠曼波思维导图大冲刺(先看框架再看细节哦): 📚 解释 Java 中 IO、NIO、AIO 的区别和适用场景: …...