HTTPS的加密流程

news2024/12/27 13:55:17

HTTPS的加密流程

  • 🔎加密
  • 🔎HTTPS的基本工作过程
    • 使用对称加密
    • 引入非对称加密
    • 黑客的反制(中间人攻击)
    • 一山更比一山高(引入证书)
  • 🔎结尾

🔎加密


  • 加密
    • 对称加密
    • 非对称加密

对称加密🍭

只需要一个密钥(Key)

明文 + Key = 密文(明文 与 密钥 结合, 通过加密手段变成密文)
密文 + Key = 明文(密文 与 密钥 结合, 通过解密手段变成明文)

在这里插入图片描述

非对称加密🍭

需要两个密钥
一个是公钥(Pub)
一个是私钥(Pri)

明文 + Pub = 密文(明文 与 公钥 结合, 通过加密手段变成密文)
密文 + Pri = 明文(密文 与 私钥 结合, 通过解密手段变成明文)

在这里插入图片描述

🔎HTTPS的基本工作过程

使用对称加密


在这里插入图片描述

服务器对应的客户端有很多个
不同的客户端使用的密钥不同

如果全部的客户端都使用相同的对称密钥
那么黑客也可以伪装成客户端来获取对称密钥
(拿到对称密钥的黑客可以篡改信息…)

在这里插入图片描述
既然不同的客户端对应不同的对称密钥
因此就让客户端连接服务器时先自行生成一个对称密钥

那么生成好对称密钥的客户端该如何让服务器获取到对应的对称密钥呢?
网络传输

在这里插入图片描述

客户端生成对称密钥后, 将 Key 通过网络传输给服务器
但是这个数据有可能被黑客截获, 黑客也就知道了对称密钥
密文传输也就变成了明文传输


🍭那么如何解决上面的问题呢?

首先排除针对 Key 进行加密
如果针对 Key 进行加密, 就需要生成一个 Key1, 此时也需要将 Key1 通过网络传输给服务器
继续为 Key1 进行加密, 生成一个 Key2, 此时也需要将 Key2 通过网络传输给服务器

这样就陷入了死循环

解决方案
引入非对称加密


引入非对称加密


通过服务器生成的公钥(Pub)和私钥(Pri)
针对客户端生成的对称密钥(Key)进行加密与解密

  • 公钥和私钥是两个比较大的整数
  • 这两个整数, 任意一个作为公钥, 另一个作为私钥

在这里插入图片描述

流程分析🍭

  1. 客户端向服务器索要公钥(Pub)对 对称密钥(Key)进行加密
  2. 服务器收到客户端的请求后返回 Pub 给客户端
  3. 客户端利用 Pub 对 Key 进行加密并发送给服务器
  4. 黑客截获到带有 Pub 的 Key(加密后的 Key), 但因为没有与 Pub 匹配的私钥(Pri), 因此无法进行解密
  5. 服务器成功收到 Pub 加密后的 Key, 并用 Pri 进行解密

当客户端成功将 Key 发送到服务器之后
依旧使用对称加密方式
非对称加密的引入是为了将 Key 发送给客户端

为何不依旧引入非对称加密🍭

  • 对称加密速度快, 成本低
  • 服务器拿到 Key, 黑客并未拿到 Key, 也就无法对 Key 所加密的数据进行篡改…
    (将 Pub 理解成一个带锁的盒子, 盒子里面装着 Key, 打开盒子需要 Pri, 而 Pri 只有服务器拥有, 黑客并没有 Pri)

在这里插入图片描述

后续传输过程🍭

在这里插入图片描述

黑客的反制(中间人攻击)


黑客伪装成服务器生成公钥(Pub1)和私钥(Pri1)
当客户端向服务器索要公钥(Pub) 时, 将自己生成的 Pub1 发送给服务器
在这里插入图片描述

客户端使用 Pub1 对 Key 进行加密并返回给客户端
黑客截获到 Pub1 加密后的 Key, 并利用自己生成的 Pri1 对 Pub1 进行解密
解密完成, 黑客获取到了 Key
黑客将获取到的 Key 通过服务器生成的公钥(Pub) 进行加密
服务器收到 Pub 加密后的 Key 并利用 Pri 进行解密
解密结束后告知客户端 “成功收到Key”

解释🍭

将 Pub 看作是带有锁的盒子, Key 是需要存放在盒子中的内容, Pri 则是打开 Pub 这个盒子的钥匙
黑客是想要获得 Key(盒子中的内容)的角色
游戏的过程是客户端需要让服务器拿到盒子中的内容, 并且不能让黑客拿到盒子中的内容

服务器向客户端发送 Pub(带锁的盒子), 客户端拿到Pub, 黑客也拿到了 Pub
但是黑客没有钥匙(Pri), 因此无法打开盒子
怎么办?
“偷梁换柱” — 黑客自己伪造了一个盒子(Pub1)并且黑客拥有这个盒子的钥匙(Pri1)
黑客将伪造的盒子发送给客户端
客户端看到盒子发送过来了, 就乖乖的将 Key 放入盒子中并发送给服务器
黑客截获到客户端发送的带有 Pub1 加密的 Key, 并利用 Pri1(Pub1 这个盒子的钥匙)对盒子进行解锁
黑客获取到了 Key

游戏结束

在这里插入图片描述

一山更比一山高(引入证书)


如何才能规避上述问题呢?
引入证书

上述问题的关键在于客户端并不能区分是服务器生成的 Pub 还是黑客伪装成服务器生成的 Pub1
证书的引入可以让客户端辨别是否为服务器生成的 Pub

密钥🍭

引入证书后, 共计 5 把密钥

在这里插入图片描述

证书🍭

服务器向权威机构申请证书

在这里插入图片描述

  • 证书包括
    • 服务器的 URL
    • 证书的过期时间
    • 证书的颁布机构
    • 服务器生成的公钥(Pub)
    • 加密后的签名

可以将加密后的签名看作是校验和

  • 加密后的签名
    • 根据证书的其他属性计算得出签名
    • 证书的颁布机构利用自己的私钥(Pri2) 针对签名进行加密

如果数据(证书中的内容)相同, 按照相同的算法计算得到的签名也相同
如果签名不同, 则表示数据(证书中的内容)不同, 证书被修改

在这里插入图片描述

执行流程🍭

客户端向服务器索要证书
服务器给予客户端证书

注意
权威机构的公钥(Pub2)是每个系统自带的

在这里插入图片描述

客户端拿到证书后, 首先对证书进行 “校验”

  1. 客户端利用公钥(Pub2)对证书的加密签名解密, 得到结果 sum1
  2. 客户端计算证书中除加密签名之外的属性值, 得到结果 sum2
  3. 对比 sum1, sum2
    如果结果相同, 表示证书未被修改
    如果结果不同, 表示证书被修改

可能的疑问🍭

为何引入证书黑客便无法篡改信息

  • 黑客篡改信息, 需要执行

    • 将证书中的服务器公钥(Pub2)替换成自己的公钥(Pub1)
    • 根据证书中的各个属性值, 重新计算出签名
    • 需要对计算出的签名进行加密

对于最后一步, 黑客没有权威机构的私钥(Pri2), 也就无法对签名进行加密

你可能会说, 那为何黑客不伪造一个私钥进行加密
还记得前面提到过的每个系统内置了权威机构的公钥(Pub2)
公钥与私钥的关系是相匹配的
回忆前面说到的带锁的盒子与钥匙
黑客伪造的私钥与系统内置的公钥无法匹配

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油

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

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

相关文章

【Java系列】深入解析枚举类型

序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题&a…

行为型设计模式01-策略模式

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 策略模式 问题引入:实现一个商场收银软件,简单的实现就是单价和数量的乘积。 1、商场收银软件 下面就来看…

掌握RDD分区

零、本讲学习目标 学会如何指定分区数量会定义与使用自定义分区器 一、RRD分区 (一)RDD分区概念 RDD是一个大的数据集合,该集合被划分成多个子集合分布到了不同的节点上,而每一个子集合就称为分区(Partition&#…

3.5 RDD持久化机制

一、RDD持久化 1、不采用持久化操作 查看要操作的HDFS文件 以集群模式启动Spark Shell 按照图示进行操作,得RDD4和RDD5 查看RDD4内容,会从RDD1到RDD2到RDD3到RDD4跑一趟 显示RDD5内容,也会从RDD1到RDD2到RDD3到RDD5跑一趟 2、采用持久化…

python解析html数据,获取到的链接是以/或 ./ 或 ../ 开头的相对链接,不是以http开头的,需要补全

一、实现的目标 在使用爬虫获取网页html数据时,解析到的链接是/或./ 开头的相对链接,不是以http开头的链接,如:/picture/0/cca65350643c441e80d390ded3975db0.png 。此时需要完成对该链接的补全,以得到正确的链接。此外,我们需要将解析到的html数据保存到起来,将来需要展…

3.8 Spark RDD典型案例

一、利用RDD计算总分与平均分 (一)准备工作 1、启动HDFS服务 2、启动Spark服务 3、在本地创建成绩文件 4、将成绩文件上传到HDFS (二)完成任务 1、在Spark Shell里完成任务 (1)读取成绩文件&#xff…

【搭建轻量级图床】本地搭建LightPicture开源图床管理系统,并公网远程访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…

二十三种设计模式第九篇--代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 意图:为其他对象提供一种代理以控制对这…

示范性微电子院校“抢人”,芯片赛道黄不了!

经常看到有同学问,“国内高校微电子专业最好的是哪所高校?”“想搞数字ic设计去哪所大学好呢?” 其实国内28所示范性微电子学院都是非常不错的选择。 2015年,九所示范性微电子院校名单公布,包括了清华大学、北京大学、复旦大学…

8、Linux C/C++ 实现MySQL的图片插入以及图片的读取

本文结合了Linux C/C 实现MySQL的图片插入以及图片的读取,特别是数据库读写的具体流程 一、文件读取相关函数 fseek() 可以将文件指针移动到文件中的任意位置。其基本形式如下: int fseek(FILE *stream, long offset, int whence);其中,str…

kafka 设置用户密码和通过SpringBoot测试

叙述 当前Kafka认证方式采用动态增加用户协议。 自0.9.0.0版本开始Kafka社区添加了许多功能用于提高Kafka群集的安全性,Kafka提供SSL或者SASL两种安全策略。SSL方式主要是通过CA令牌实现,此文主要介绍SASL方式。 1)SASL验证: 验证方式Kaf…

【JavaSE】Java基础语法(六):方法详解

文章目录 1. 方法概述1.1 方法的概念 2. 方法的定义和调用2.1 方法的定义2.2 方法的调用过程 3. 带参数方法的定义和调用3.1 带参数方法定义和调用3.2 形参和实参 4. 带返回值方法的定义和调用4.1 带返回值方法定义和调用4.2 带返回值方法的练习-求两个数的最大值(应用) 5. 方法…

【链接】深入理解PLT表和GOT表

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于多处理器编程的艺术进行的,每个知识点的修正和深入主要…

nest日志包pino、winston配置-懒人的折腾

nest日志 三种node服务端日志选型 winstonpinolog4js 2023年5月23日 看star数:winston > pino > log4js 使用体验: pino 格式简洁,速度快,支持输入日志到任意数据库,日志暂无自动清理(可能是我…

AI是怎么帮我写代码,写SQL的?(本文不卖课)

近期,ChatGPT风起云涌,“再不入局,就要被时代淘汰”的言论甚嚣尘上,借着这一波创业的朋友都不止3-4个,如果没记错,前几次抛出该言论的风口似乎是区块链,元宇宙,WEB3.0。 画外音&…

动态规划问题实验:数塔问题

目录 前言实验内容实验流程实验过程实验分析伪代码代码实现分析算法复杂度用例测试 总结 前言 动态规划是一种解决复杂问题的方法,它将一个问题分解为若干个子问题,然后从最简单的子问题开始求解,逐步推导出更复杂的子问题的解,最…

绝世内功秘籍《调试技巧》

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 内容专栏:这里是《C知识系统分享》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,希望可以帮到读者们哦。 内…

CloudQuery v2.0.0 发布 新增数据保护、数据变更、连接管理等功能

哈喽社区的小伙伴们,经过一个月的努力,CloudQuery 社区版发布了全新 v2.0.0系列! 对比 v1.5.0,v2.0.0 在整体 UI 界面上就做了很大调整,功能排布我们做了重新梳理,可以说,社区版 v2.0.0 带领 C…

Linux——makefile自动化构建工具

一. 前言 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能…

数据结构的定义

主要的定义 数据 描述客观事物的数和字符的集合,比如文字,数字和特殊符号 基本单元:数据元素 一个数据单元由若干个数据项构成 数据项:具有独立含义的数据最小单元,也称字段或域 数据元素&…