网络原理(5)--HTTPS是如何进行加密的

news2024/11/26 14:25:49

💕"Echo"💕
作者:Mylvzi
文章主要内容:网络原理(5)–HTTPS是如何进行加密的
在这里插入图片描述
在网络原理(4)中介绍了HTTP协议的相关内容,HTTP协议在传输的过程中存在着安全问题,实际上现在的网络中基本不再使用HTTP,而是使用一种更加安全的协议HTTPS

一.前言

HTTPS是基于HTTP,之前学习过的有关HTTP协议的相关内容在HTTPS上都是同样适用的,HTTPS是在HTTP的基础之上引入了加密机制

之所以会有HTTPS的出现,主要还是因为HTTP协议在传输的过程中遇到了安全问题,比如随便连接公共WiFi就有可能导致数据的丢失,黑客可以对公共WIFI所在的路由器进行抓包分析,获得你上网的一些相关信息(比如支付宝密码),甚至说黑客都可以伪装成公共WiFi的路由器

如果一些敏感数据不进行加密,就相当于数据在网络中裸奔传输,被黑客获取到就会带来风险.实际上,像支付宝密码这样的敏感数据,支付宝的官方都是进行了加密,黑客拿到的数据是加密过后的密文,黑客无法进行解密~

为了解决HTTP在传输过程中的不安全性,HTTPS中就引入了加密机制,保证数据在传输的过程中不是裸奔传输

二.HTTPS的加密机制

1.基本概念

要了解HTTPS的加密机制,需要先了解是哪个基本概念:密文,明文,密钥

明文:要传输的原始数据,比如你要发送"你好",你好这两个字就是明文

密钥:对明文加密,对密文解密的工具

密文:对明文进行密钥加密过后的数据 比如将原始数据"你好"加密为"nh","nh"就是密文,传输过程中密文在网络中进行传输

明文 + 密钥 => 密文
密文 + 密钥 =>明文

2.加密机制

HTTPS中进行加密的机制主要有两种:对称加密和非对称加密

1.对称加密

对称加密就是在加密的过程中使用同一把密钥进行加密解密的过程

假设密钥是 key,那么;

明文 + key => 密文
密文 + 可以=> 明文

2.非对称加密

非对称加密就是在加密的过程中使用两把不同的密钥进行加密解密的过程,一把被称为公钥(可以被公开出来的),一把被称为私钥(自己单独享有的),使用那一把加密/解密都是相同的,比如假设公钥是key1,私钥是key2,使用公钥进行加密,使用私钥进行解密

明文 + key1 => 密文
密文 + key2 => 明文

三.HTTPS的加密机制的工作过程

HTTPS的加密主要是对HTTP报文中的头部和body进行加密

1.对称加密

对称加密在加密解密的过程中使用的是同一把密钥进行加密解密

加密的具体过程如下:

  1. 客户端产生一个明文请求,使用产生的对称密钥对明文请求进行加密,得到密文请求
  2. 客户端将产生的密文请求经运营商路由器传输给服务器
  3. 服务器得到密文请求,使用相同的对称密钥进行解密,得到原始的明文请求
    在这里插入图片描述

想一个问题,服务器不是只和一个客户端进行通信,是和很多客户端进行通信,每一个客户端的对称密钥是否都相同呢?肯定是不同的,如果相同,黑客就可以作为客户端得到对称密钥,就可以利用这个对称密钥进行解密了

实际上,对称密钥是客户端再和服务器连接时就要提前产生的,这个对称密钥利用随机数的相关机制产生,保证每个客户端的对称密钥都不相同
在这里插入图片描述

上述机制真的没有问题么?其实存在一个致命缺陷,对称密钥是通过客户端利用随机数机制产生的,服务器也要持有相同的对称密钥,客户端通过网络传输传输给服务器,黑客就可能把对称密钥也给截获,就可以利用截获的密钥进行解密,此时不就加密了个寂寞么?

在这里插入图片描述

有人可能会说,那我就对产生的对称密钥进行加密不就行了么?但是对对称密钥加密的密钥不也得通过网络传输给服务器么?这个方法肯定是行不通的,再仔细想想,对称加密存在安全问题的关键在于对称密钥是赤裸裸的在网络中进行传输的,密钥就像是秘密,秘密很关键,很重要,所以应该自己持有,不应该公布出去,这样的密钥就是私钥,这也是非对称加密的关键!

2.非对称加密

非对称加密在加密解密的过程中使用的是一套密钥,公钥和私钥进行加密解密

公钥私钥由服务器产生,公钥通过网络传输给客户端,私钥只有服务器自己持有,不在网络中进行传输,此时就可以使用公钥进行加密,使用私钥解密

加密的具体过程如下:

  1. 服务器产生一套密钥 公钥+私钥 通过网络将公钥传输给客户端,私钥自己持有
  2. 客户端产生明文请求和对称密钥,使用公钥对对称密钥加密,使用对称密钥对明文请求进行加密–>得到密文请求
  3. 客户端将产生的密文请求经运营商路由器传输给服务器
  4. 服务器收到密文请求,首先使用私钥对对称密钥进行解密,得到对称密钥,再利用对称密钥对密文请求进行解密,得到明文请求
    在这里插入图片描述

在这个过程中,黑客由于不持有私钥,就无法获取到对称密钥,进而无法进行解密

注意:为什么有非对称密钥了还要使用对称密钥,直接把所有的数据通过非对称密钥进行传输不行么?其实也可以,但是效率太低,成本也太高

非对称密钥由于其复杂性,在传输的过程中传输成本高,运算效率低,而对称密钥传输成本低,运算效率高,为了保证传输的效率,使用非对称密钥传输关键数据(如密钥),剩余的大量的业务数据通过更加快速的对称密钥进行传输

可以说,非对称密钥引入安全性,必然要降低传输效率(就和TCP引入可靠性效率降低一样)

以上就是非对称加密机制保证数据传输安全的机制,核心在于:黑客不持有私钥,无法对由客户端传输过来的通过公钥加密的对称密钥进行解密

但就算这样做还是存在安全漏洞(你不得不佩服黑客):黑客要想办法能够对对称密钥进行解密,怎么解密呢?让对称密钥的密钥不是服务器生成的公钥,自己产生一对公钥和私钥,让客户端通过自己产生的公钥对对称密钥进行加密,这样黑客就能拿到对称密钥,紧接着,再使用服务器产生的公钥对数据进行加密,传输给服务器,服务器收到数据也能解密,整个过程看起来没有被解密过,实际上被黑客瞒天过海了,但是~服务器产生的公钥根本没有传输到客户端,而是被黑客截取了!

这种机制也被叫做"中间人攻击问题"!

3.中间人攻击

图解:
在这里插入图片描述
具体过程:

  1. 服务器产生一对密钥:公钥(pub1) 私钥(pri1),并将公钥(pub1)经过网络传输给客户端
  2. 黑客截取服务器传输的公钥(pub1),自己产生一对公钥(pub2)和私钥(pri2),并将自己产生的pub2传输给客户端,自己保留pri2
  3. 客户端收到黑客产生的公钥(pub2),利用这个公钥对产生的对称密钥进行加密,然后生成密文请求,将密文请求发送给服务器
  4. 黑客截取产生的密文请求,利用自己产生的私钥(pri2)解密对称密钥,得到对称密钥,解密密文请求
  5. 黑客将得到的明文请求使用服务器产生的公钥(pub1)进行加密,传输给服务器
  6. 服务器收到经pub1加密的密文请求,使用pri1解密,得到明文请求

整个过程黑客成功实现了瞒天过海,服务器收到经pub1加密的数据,就认为传输的过程中没有发生解密的过程,实际上黑客利用自己产生的一对密钥进行了调包

那如何解决中间人问题呢–引入公正机构

中间人问题产生的原因在于客户端没有判别能力,他不知道传输过来的公钥属于黑客还是属于服务器,第三方机构就让客户端拥有了判别能力

4.公正机构(数字签名)解决中间人问题

首先,网站的开发者在搭建网站时,生成一对服务器的公钥和私钥,并向公正机构申请一个证书,服务器需要提供一些服务器相关的数据(网站域名/服务器公钥等),公正机构根据这些信息进行审核,审核通过产生一个证书,证书不是纸质的,而是一段结构化数据,证书内部有很多属性,比如网站域名,公钥,证书的过期时间等,其中最重要的属性是数字签名,数字签名是一个被加密过的校验和,通过证书中的属性计算出一个校验和,再利用公正机构自己产生的私钥进行加密,就得到了数字签名,这个属性,将是客户端验证公钥的关键!公正机构产生的公钥一般都是内置在客户端的操作系统之中

客户端在和服务器进行通信时,也会向服务器申请服务器的证书,证书中包含服务器产生的公钥
在这里插入图片描述
客户端收到传输过来的公钥(服务器产生),就可以利用数字签名来校验公钥是否被替换过,这个过程也被称作证书的校验,核心就是计算这里面的校验和

客户端利用操作系统内置的公正机构的公钥对数字签名进行解密,得到证书的校验和,客户端重新对证书进行校验和的计算,得到一个新的校验和,将这个计算出的校验和和解密得到的校验和进行对比,如果相同,就证明服务器的公钥没有被篡改,证书是可信的

如果黑客使用自己的公钥替换了服务器的公钥,那么客户端计算出的校验和就会解密出的校验和不一致,此时就会警告客户端(往往是弹出一个小框,显示有风险)

同时,黑客也无法修改证书之中的数字签名,数字签名的解密需要通过公正机构的公钥,但是这个公钥是客户端操作系统内置的,黑客无法获取

那黑客不能自己申请一个证书么?不能,如果要申请证书,就要向公正机构提供服务器的域名和持有者信息,黑客不是服务器的持有者,从而就无法申请证书

上述就是HTTPS加密的整个过程,看得出来攻击和防御是"相辅相成"的,网络安全在现在也是一个巨大的挑战!

总结:HTTPS的加密

  1. 对称密钥,加密业务数据
  2. 非对称密钥,加密对称密钥
  3. 中间人攻击
  4. 使用证书的数字签名,校验服务器的公钥

以上就是<<网络原理(5)–HTTPS是如何进行加密的>>的所有内容,至此,网络原理章节完结撒花!

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

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

相关文章

记录setData报错TypeError: [object Array] is not a function

小程序调用setData控制台显示报错.但是功能正常 同样的各个地方调setData都报错,经过一轮排除法后发现是自定义组件写法有问题 修改正确之后就没问题了

穷人沉迷多巴胺,富人追求内啡肽

奶头乐理论 1995年&#xff0c;美国旧金山召开了一场由500位富豪和政治家组成的精英会议。 会议认为&#xff0c;全球化的发展将使贫富差距迅速拉大、阶层矛盾日益激烈。 如何让穷人安分守己&#xff1f;他们想出了一个办法&#xff1a; 只需要像喂婴儿奶嘴一样&#xff0c…

服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析

作者&#xff1a;华为云高级软件工程师 栾文飞 一、概述 Sermant是基于Java字节码增强技术的无代理服务网格&#xff0c;其利用Java字节码增强技术&#xff0c;为宿主应用程序提供服务治理功能&#xff0c;以解决大规模微服务场景中的服务治理问题&#xff0c;通过Java字节码…

uniapp H5唤起手机App 中间下载页

我这里直接是打开中间下载页&#xff0c;在下载页判断手机是否已存在App&#xff0c;有则唤起App&#xff0c;没有则可点击下载按钮下载app。 唤起App的关键语句是&#xff1a;window.location.href scheme Scheme链接格式样式&#xff1a; [scheme]://[host]/[path]?[que…

Backend - Django SimpleUI(美化 Django Admin )

目录 一、作用 二、安装 & 配置 &#xff08;一&#xff09;安装依赖 &#xff08;二&#xff09;配置 &#xff08;三&#xff09;运行 三、基础设定 &#xff08;一&#xff09;创建用户 &#xff08;二&#xff09;设置标题 &#xff08;三&#xff09;设置登录…

算法刷题:找到字符串中所有的字母异位词

找到字符串中所有的字母异位词 .题目链接题目详情题目解析算法原理滑动窗口流程图定义指针及变量进窗口判断出窗口更新结果 我的答案 . 题目链接 找到字符串中所有的字母异位词 题目详情 题目解析 所谓的异位词,就是一个单词中的字母,打乱顺序,重新排列得到的单词 如:abc-&g…

爬虫入门一

文章目录 一、什么是爬虫&#xff1f;二、爬虫基本流程三、requests模块介绍四、requests模块发送Get请求五、Get请求携带参数六、携带请求头七、发送post请求八、携带cookie方式一&#xff1a;放在请求头中方式二&#xff1a;放在cookie参数中 九、post请求携带参数十、模拟登…

使用IDEA配置GO的开发环境备忘录

1. 安装GO 1.1 下载&安装 进入GO的官网下载对应的GO&#xff0c;本人环境为mac选择最新的1.22.0版本&#xff0c;在本地安装即可 1.2 配置相关环境变量 修改~/.bash_profile&#xff0c;添加如下的配置 GOPATH/Users/kevin/go/src GOBIN/Users/kevin/go/go/bin GOROOT/…

【Redis快速入门】深入解读哨兵模式

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

贪心算法之合并区间

“任世界多宽广&#xff0c;停泊在这港口~” 区间问题&#xff0c;涉及到最多的就是 取交集 和 并集的概念。我们使用C排序算法后&#xff0c;其默认规则就是按照 “左排序”进行的。因而&#xff0c;我们实质上注意的是每一个区间的 右端点&#xff0c;根据题目要求&#xff…

如何使用Docker部署Drupal并结合cpolar实现固定公网地址访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言 大家好&#xff0c;我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号&#xff0c;离现在已经13天了。非常抱歉&#xff0c;中间隔了那么久。一方面是基础知识学完之后&#xff0c;就要开始自己写代码了。看基础知识和写代码是两回事&#xff0c;理论和实践的…

Python Selenium实现自动化测试及Chrome驱动使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 Selenium简介 安装Selenium库 编写自动化测试脚本 1 打开浏览器并访问网页 2 查找页面元…

如何低成本实现商场室内导航地图制作

商场地图导航可提升顾客服务体验&#xff0c;促进商场信息化建设。蜂鸟视图提供两种低成本的商场导航实现方式&#xff0c;以满足不同需求。 一、模拟导航 用户可选用“模拟导航”&#xff1a;将商场CAD图纸导入蜂鸟视图地图编辑器&#xff0c;通过简单操作生成室内3D地图&…

深入理解 Vue3 中的 setup 函数

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

迁移SVN和GIT的云端数据

在新服务器搭建GIT仓库 教程很多&#xff0c;大致的流程是&#xff1a; 1. 新建linux用户密码专用于git操作 2. 新建git库的存放文件夹并在此初始化git 3. 配置git库所在目录权限 *只需要有一个库和有一个用户&#xff0c;与在windows上建库是一样的。不需要搭建类似gitla…

一文彻底搞懂什么是类加载器

文章目录 1. 类加载器简介2. 类加载器的种类3. 类加载执行过程3.1 加载3.2 验证3.3 准备3.4 解析3.5 初始化3.6 使用3.7 卸载 1. 类加载器简介 类加载器&#xff08;Class Loader&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;的一部分&#xff0c;JVM只会运行二进制…

C语言------一种思路解决实际问题

1.比赛名次问题 ABCDE参加比赛&#xff0c;那么每个人的名次都有5种可能&#xff0c;即1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff1b; int main() {int a 0;int b 0;int c 0;int d 0;int e 0;for (a 1; a < 5; a){for (b 1; b < 5; b){for…

树和堆的精讲

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…