HTTPS加密流程

2023-09-18 16:39:14

HTTPS

一. 什么是HTTPS

HTTPS与HTTP一样都是应用层协议,与HTTPS不同的是:HTTP的协议内容都是按照文本方式进行明文传输的,这导致在传输过程第三方者能够轻易获取传输的内容,而HTTPS在HTTP协议基础上引入一个加密以防止传输内容泄露或被篡改。

二. 什么是"加密"

加密就是将明文(要传输的信息)按照指定的方式进行变换,生成密文. 解密就是将密文按照指定的方式进行变换,还原成明文.
在加密和解密的过程中,一般需要一个或多个中间转换的数据,来辅助这过程的正常进行,这个数据就被叫做密钥.

作用:就是防止他人获取其中的明文,窃取信息继而造成隐患.

像我们这些学编程的,对于"加密"这一词,倒是听说过,就从按位异或来讲.

a ^ b = c
c ^ b = a
//10 ^ 12 = 6
//6 ^ 12 = 10

我们可以发现,此时我们的 b 就是一把密钥,通过这个钥匙,可以给 a 加密变成 c ,也可以给 c 解密变成 a.

三. 加密的方式有哪些

1. 对称加密

对称加密其实就是通过一个"密钥",把明文加密成密文,并且把密文解密成明文.
上面举得例子就是,加密和解密用的都是同一个密钥.

画个图大家就好理解了…

在这里插入图片描述

假设盒子里的内容就是要传递的信息,那么为了保证这个信息不泄露,我们需要对盒子加密.只有拥有密钥的才可以查看明文.

假设这个是服务器要发给客户端的.那么当,客户端和服务器都拥有这把密钥之后,他们之间进行信息的传输就是安全的.

怎么才能做到客户端和服务器都有这把钥匙呢?此时就需要通过网络将这把钥匙的模板传过去.

在这里插入图片描述

但是这个密钥是通过网络途径传输过去的,有可能会被黑客截胡,那么这个黑客不就也拿到了这个密钥嘛?

在这里插入图片描述

对称加密里最关键的就是密钥,客户端和服务器需要先约定好密钥是什么,如果客户端生成了密钥,就需要通过网络告知服务器密钥是什么,由于密钥本身也会在网络上明文传输,一旦被黑客截获,那么后续对数据的加密也就失去了意义.

因此密钥的传输也必须加密,即指定一个"密钥的密钥",也就是下面讲的非对称加密.

2. 非对称加密

给大家讲个游戏规则:

  • 甲乙丙三个人
  • 甲手里有一个盒子和一把锁以及两把钥匙,这个钥匙呢就比较特殊了,A钥匙可以给锁上锁,B钥匙可以给锁解锁.
  • 乙手里有一封信,需要传输到甲的手里,但是不可以给丙看
  • 此时甲乙分别在两个不同的房间中,一切的交流都是需要丙来进行传递.
  • 丙是负责中间送东西的,它的任务就是看到信封中的内容.(规定时间内一定要送到)
  • 问:如何不让丙看到信封的内容,并且还能够把信封安全的送到甲的手里?

在这里插入图片描述

我们可以:

  1. 甲先把没有上锁的空盒子交给丙帮忙送过去
  2. 此时乙不需要任何行动
  3. 甲再将用于上锁的钥匙A交给丙,让他给送过去
  4. 此时乙的手里就有一个没有上锁的空盒子和一个可以上锁的钥匙以及要传递的信封
  5. 乙可以将信封装进空盒子,再将空盒子上锁,最后一并交给丙.
  6. 由于丙没有钥匙B解不开这个盒子,所以只能将盒子连带钥匙一并交给甲
  7. 甲手里有钥匙B,所以甲可以打开盒子拿到信封
  8. 需要注意的是上锁的钥匙和没上锁的空盒子要分开送,不然丙一旦上了锁,乙也是打不开这个盒子的

通过上面的这个小游戏,我们可以理解为:

信封就是对称密钥,钥匙A,B就是非对称密钥,我们需要通过非对称密钥来完成将对称密钥安全的送到对方手里的这个任务.

下面是正式的讲解:

非对称加密要用到两个密钥,一个叫公钥,另一个叫做私钥.(公钥和私钥是成对出现的,公钥用于加锁,私钥用于解锁)
通过公钥对明文进行加密,变成密文:然后通过私钥对密文进行解密,变成明文,也可以反着用.

公钥和私钥是配对的,最大的缺点就是运算速度非常慢,比对称加密慢好多.

我们引入非对称加密,来对自己的对称密钥进行加密:

  1. 一般的服务器会生产自己的公钥和私钥,把公钥对外开放出去,自己保留私钥.
  2. 客户端使用这个服务器的公钥对自己的对称密钥进行加密,然后将加密好的对称密钥以密文的形式发送给服务器,服务器使用私钥进行解密,因此就获得了对称密钥的明文.

注意:

由于对称加密的成本是比较低的,即机器资源消耗量是比较小的,速度也比较快,因此我们传输数据时会先利用非对称加密方式将对称密钥进行加密,然后使用对称密钥再对数据进行加密.

还不清楚的话.大家看下面的一个图:

在这里插入图片描述

此时的黑客,即使截获到了这个传输的数据,也无法拿到对称加密的密钥.

不过你以为这样就可以难到我懒洋洋大王了吗?
在这里插入图片描述

3. 中间人攻击

可能你认为上面的操作已经足够安全了…

NONONO!!!

假如我在截取到你的数据后,将你的数据篡改,阁下该如何应对?

看图:
在这里插入图片描述

上图就是关于中间人攻击的一个介绍,实质上就是黑客在中间充当一个双面客. 服务器将公钥pub1发送过来,黑客中间劫持,并且自己生成了一对非对称密钥,将自己生成的pub2发送给客户端,但是由于客户端不知道发来的pub2是不是服务器的公钥,因此就上当了.将对称密钥通过pub2进行加密,发送给黑客,然后黑客将pub2加密的对称密钥进行解密,拿到客户端的对称密钥,再将自己的对称密钥通过pub1进行加密,发送给服务器.由于服务器也不知道这个加密过的对称密钥是不是客户端发送来的,因此就使用这个对称密钥进行后续的加密了.

从上述过程来说,客户端无法判断公钥的真假造成的。如果客户端可以辨别公钥的真假,那么这个中间人攻击也就迎刃而解了!

4. 引入证书

为了解决上述问题,人们就想出来了"证书"这个方法.就是一些服务器(网站)在成立的时候,需要去一些专门的认证机构(第三方机构)申请证书.服务器需要提供一些资质,当申请通过后,机构就会给你颁发一个证书.其中,证书中也就包含了公钥.此时客户端申请公钥的时候,就不应该只是请求一个公钥了,而是请求要一个证书.当客户端拿到证书后,就可以进行校验,验证证书是不是假的或者被篡改过的.如果客户端发现证书是无效的,浏览器就会直接弹出警告…

查看证书的过程:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们可以看到上面有一个字段是指纹.其实这个指纹里面存的内容就是将上面整体的字段通过签名算法求出签名,再根据证书提供的公钥,来进行加密的密文.

证明机构本身是非对称加密的,上面的指纹就是通过证明机构的公钥进行加密,证明机构的私钥会在客户端下载这个安全证书后自带.

那么这个证书给密文加密后,我这里也没有密钥,该怎么解析呢?

其实不然,因为我们的系统中会自带一些证书的密钥,用于解析密文,又因为是自带的,不需要通过网络的传输,所以不用担心这个密钥被获取.

此时大概的流程我们可以画图参考一下:

在这里插入图片描述

注意,认证机构是有一对非对称密钥的。私钥用来加密hash值就得到了签名。公钥给客户端就可以解密签名获得hash值了。

更多推荐

【Linux】系统编程生产者消费者模型(C++)

目录【1】生产消费模型【1.1】为何要使用生产者消费者模型【1.2】生产者消费者模型优点【2】基于阻塞队列的生产消费者模型【2.1】生产消费模型打印模型【2.2】生产消费模型计算公式模型【2.3】生产消费模型计算公式加保存任务模型【2.3】生产消费模型多生产多消费【1】生产消费模型生产消费模型的321原则(便于记忆)。

WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:js控制绘制点位

js改变点位,动态传值<canvasid="canvas"></canvas><!--顶点着色器--><scriptid="vertexShader"type="x-shader/x-vertex">attributevec4a_Position;voidmain(){//点位gl_Position=a_Positio

<Babel> 前端语言的巴别塔

Babel中文站点:https://www.babeljs.cn/Babel外文站点:https://babeljs.io/什么是BabelBabel取自人类语言最早的传说,TowerofBabel。上帝摧毁了巴别塔上说着共同语言的我们,又被Babel重新带了回来。如果说巴别塔是人们对混乱到秩序的向往,那Babel在前

详细介绍Webpack5中的Loader

loader用于帮助webpack将不同类型的文件转换为webpack可识别的模块。优先级分类pre:前置loadernormal:普通loader,没有用enforce指定就是normalinline:内联loaderpost:后置loaderloader执行顺序pre>normal>inline>post相同优先级

【深度学习】卷积神经网络(LeNet)【文章重新修改中】

卷积神经网络LeNet前言LeNet模型代码实现MINST代码分块解析1构建LeNet网络结构2加载数据集3初始化模型和优化器4训练模型5训练完成完整代码Fashion-MINST代码分块解析1构建LeNet网络结构2初始化模型参数3加载数据集4定义损失函数和优化器5训练模型完整代码参考与更多阅读材料前言全连接神经网络

前端进阶--深入理解JavaScript

1、JS的作用域和作用域链作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和函数。作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是

SpringBatch ItemProcessor详解

ItemProcessor在SpringBatch中用于对每个读取的数据项(item)进行处理或转换。一、ItemProcessor具体功能数据清洗(DataCleansing):清理数据以确保数据的一致性和准确性。这可以包括去除不必要的空格、特殊字符、修复数据格式等。数据转换(DataTransformation):

mongodb语法以及springboot中操作mongodb数据库(query update Criteria的使用)

mongodb语法创建数据库:useDATABASE_NAME创建集合:db.createCollection("COLLECTION_NAME")插入数据:db.COLLECTION_NAME.insert({key:value})查询数据:db.COLLECTION_NAME.find()更新数据:db.COLLE

基于SpringBoot的阿博图书馆管理系统

目录前言一、技术栈二、系统功能介绍管理员功能模块用户功能模块前台首页功能模块三、核心代码1、登录模块2、文件上传模块3、代码封装前言随着社会的发展,计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机,通过对图书借阅等信息进行管理。减少管理员的工作,同时也方便广大用户对所需图书借阅

MongoDB索引

索引支持在MongoDB中高效执行查询。如果没有索引,MongoDB必须扫描集合中的每个文档才能返回查询结果。如果查询存在适当的索引,MongoDB将使用该索引来限制它必须扫描的文档数。尽管索引提高了查询性能,但添加索引对写入操作的性能有负面影响。对于具有高读写比率的集合,索引是昂贵的,因为每次插入都必须更新任何索引。

第四天:gec6818开发板串口蓝牙模块的使用与配置

串口通信串口是一种简单的通信接口,也是单片机中最常用最简单的通信方式通常传感器都是采用串口作为与上位机的通信接口ARM板有三个可外接传感器的串口接口,位于开发板右上角从上到下,分别是串口号串口驱动设备文件CON2“/dev/ttySAC1”CON3“/dev/ttySAC2”CON4“/dev/ttySAC3”将传感器

热文推荐