抽象的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. 证书签名:以上信息哈希摘要后,用大强的私钥加密生成的
=======证书结束=======

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

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

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

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

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

相关文章

高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?

如果有遗漏,评论区告诉我进行补充 面试官: Nacos如何处理网络分区情况下的服务可用性问题? 我回答: 在讨论 Nacos 如何处理网络分区情况下的服务可用性问题时,我们需要深入理解 CAP 理论以及 Nacos 在这方面的设计选择。Nacos 允许用户根据具体的应用…

python解压文件 zip tar.gz tar.xz

以下代码为解压zip包 tar包文件 zip_path:文件绝对路径 output_folder:文件解压后存放的文件夹路径 def extract_file(zip_path, output_folder):# 支持解压zip tar tar.gz tar.xz .tar.bz2# 确保输出文件夹存在os.makedirs(output_folder, exist_okT…

网络基础(协议,地址,OSI模型、Socket编程......)

目录 一、计算机网络发展 二、协议 1.认识协议 2.OSI七层模型 3.TCP/IP 五层(或四层)模型 4.协议本质 三、网络传输流程 1.MAC地址 2.协议栈 3.IP地址 IP地址 vs MAC地址 1. 核心区别 2. 具体通信过程类比 3. 关键总结 为什么需要两者? 4.协议栈图解…

生成式AI对话中提示词策略:明确问题、明确目标和提供背景信息是最有效的策略

生成式AI对话中提示词策略:明确问题、明确目标和提供背景信息是最有效的策略 最有效的提示词策略包括明确问题、明确目标和提供背景信息。普适性有效提示词策略可分为三类:明确需求与精确指引型、清晰解释与逻辑排序型、拆解任务与多样化表达型。[局限]数据来源于中国用户,…

AtCoder ABC402 ABCD

A - CBC 把大写字母按顺序连起来 B - Restaurant Queue 一眼队列,stl模拟就行 C - Dislike Foods 显然,每次克服暴力枚举每个菜肴会超时。 然而题目中给了每个菜肴的配菜个数,不妨换过来统计每个配菜用在了哪些菜肴。每次克服时&#x…

Transformer 架构 - 解码器 (Transformer Architecture - Decoder)

欢迎回到我们的 Transformer 系列教程!在上一篇中,我们详细探讨了 Transformer 的编码器,它负责将输入的源序列(比如源语言句子)转换为一系列包含丰富上下文信息的向量表示。 现在,我们将把目光投向 Transformer 的另一半——解码器 (Decoder)。解码器负责接收编码器的输…

神经网络与模型训练过程笔记

1.专有名词 ANN 人工神经网络,一种受生物神经元启发的监督学习算法。输入数据通过网络中的层级函数传递,激活特定神经元。函数复杂度越高,模型对数据的拟合能力越强,预测精度越高。 偏置项 其中x下表从1开始的是输入变量&#xf…

【计算机网络 | 第二篇】常见的通信协议(一)

HTTP和HTTPS有什么区别? 端口号:HTTP默认是80端口,HTTPS默认是443。 URL前缀:HTTPHTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。 安全性和资源消耗:HTTP协议运行在TCP上,都是明…

【python实用小脚本系列】用 Python 自己手搓一个给视频“静音”的小脚本,批量处理,轻松高效制作“无声电影”!

嘿,小伙伴们!今天我来给大家介绍一个超实用的 Python 小工具——一个能给视频“静音”的“声音消除器”!是不是听起来很酷?想象一下,你可以把任何有声视频变成无声视频,是不是很有趣?接下来&…

【gpt生成-总览】怎样才算开发了一门编程语言,需要通过什么测试

开发一门真正的编程语言需要经历完整的设计、实现和验证过程,并通过系统的测试体系验证其完备性。以下是分阶段开发标准及测试方法: 一、语言开发核心阶段 1. 语言规范设计(ISO/IEC 标准级别) ​​语法规范​​:BNF/…

leetcode222 完全二叉树的节点个数

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(从第 0 层开始),则该层…

若依集成BladeX单点登录的令牌管理与api请求流程

目录 概述系统架构单点登录流程令牌管理机制接口调用流程关键代码实现数据结构安全性考虑常见问题与解决 概述 本文档详细说明若依系统如何实现与BladeX的单点登录集成,包括令牌管理和接口调用的完整流程。整个集成采用基于OAuth2的授权码流程,允许用…

《AI大模型应知应会100篇》第27篇:模型温度参数调节:控制创造性与确定性

第27篇:模型温度参数调节:控制创造性与确定性 摘要 在大语言模型的使用中,“温度”(Temperature)是一个关键参数,它决定了模型输出的创造性和确定性之间的平衡。通过调整温度参数,您可以根据任…

爱普生SG2520VGN差分晶振5G基站的时钟解决方案

在 5G 通信时代,数据流量呈爆发式增长,5G 基站作为信号的核心中转枢纽,承载着前所未有的数据传输与处理重任。从海量的物联网设备连接,到高速移动用户的数据交互,每一个环节都对基站的性能提出了严苛要求。而精准稳定的…

GitHub SSH连接终极解决方案

GitHub SSH连接终极解决方案:443端口修改多场景故障排查指南 一、问题现象速查 当开发者执行以下命令时出现连接异常: ssh -T gitgithub.com常见报错类型: 经典端口阻塞ssh: connect to host github.com port 22: Connection refused密钥验…

面向新一代扩展现实(XR)应用的物联网框架

中文标题: 面向新一代扩展现实(XR)应用的物联网框架 英文标题: Towards an IoT Framework for the New Generation of XR Applications 作者信息 Joo A. Dias,UNIDCOM - IADE,欧洲大学,里斯本&…

Qt unknown module(s) in qt:serialport解决方法

在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…

阀门轴承电动车工件一键精修软件

若需定制开发“ComfyUI意见精修软件” 技术栈建议: 前端:React/Vue Figma插件API(直接读取设计稿)。 后端:Node.js/Python NLP库(spaCy/NLTK)。 数据库:MongoDB(存储…

chapter32_SpringMVC与DispatcherServlet

一、简介 从本章节开始进入SpringMVC的学习,SpringMVC最重要的类就是DispatcherServlet DispatcherServlet的本质是一个Servlet,回顾一下Servlet JavaWeb就是基于Servlet的Servlet接口有5个方法Servlet实现类是HttpServlet,自定义的Servle…

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

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