HTTP加密/HTTPS工作过程

news2024/11/15 23:43:55

31.HTTPS即HTTP加密

前言

工作过程清楚明白!!!
本质上是在讲SSL,适用面很广。不用再深挖了,密码学不用了解太多

SSL和TSL,本质上是一类东西

之后可以看看123

文章目录

  • 31.HTTPS即HTTP加密
    • 前言
    • 一、什么是HTTPS、加密
      • 关于HTTPS
      • 加密是什么&HTTP报文传输为什么要加密
        • 加密
        • 运营商劫持
    • 二、HTTPS的工作过程
      • 对称加密
      • 非对称加密
      • 数字证书
    • 💯三、总结

一、什么是HTTPS、加密

关于HTTPS

HTTPS其实就是HTTP的plus版本、安全版本。这怎么说?

HTTPS其实可以理解为HTTP+SSL。

对于HTTP,前边我们已经提过了,那么什么是SSL呢?

SSL全称为Secure Sockets Layer,即安全套接层。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

目前就理解它是用于加密、帮助安全传输的协议即可,等之后能理解了,再看看这个文章。SSL

加密是什么&HTTP报文传输为什么要加密

前边,我们已经说了HTTPS其实就是HTTP加上加密,那么什么是加密呢?他又为什么要加密呢?

加密

这里其实是一对概念,加密以及解密。

加密:明文变换》密文

解密:密文变化》明文

除此以外,在加密和解密的过程中,需要一到多个中间数据,辅助传输,这些数据称为密钥。【这里的密钥有很多读音,别大惊小怪】

运营商劫持

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改 。

点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接.

运营商为什么要劫持呢?

有的运营商,把用户本身发的这个HTTP请求,改成另一个请求。

因为一些公司(设为A)会和一些浏览器(设为B)进行合作,放置广告在浏览器上边(特定关键词)。一旦用户进行点击了,双方分别统计点击量,A公司的这部分的收成会分成给B,或者按照点击量进行特定计费。

当然网络运营商,例如移动、联通、电信等,它们本身也是公司啊,也会有合作啊,那有时候或者说以前很多时候就会在HTTP请求报文传输过程中对ip进行修改,这个时候A公司收到的就会发现,这个用户是来源于网络运营商公司C,那么自然B公司就没这份钱了,C公司不劳而获了啊

可能有人会说,那个请求他想改就让他改啊?

没错,这个还真就是它想改就改的!这是因为HTTP是明文传输!!对,你没看错,它是以文本方式明文传输的。(回想之前的抓到的http请求和响应包,是以文本的形式传输的)

可能又有人会说,这种事情真令人可恨,能不能报案,告他们。回答当然是可以的,而且一定是会胜诉的。但是由于时间成本太高(具体可以了解一下一场官司的开庭到结案需要的流程,例如一审、二审等,这里由于个人认知有限所以不再班门弄斧了),所以这听起来并不是一个较优方案。

所以,这里引入了加密的机制,引入了SSL这个安全套层协议,跟HTTP 合起来就是HTTPS。

那么具体是怎么加密,SSL又是怎么在这个加密的过程中起作用的呢?我们就需要接着往下看。

但是在此之前,我们对这个内容进行小结:

什么是加密?加密就是把一系列明文变成暗文。

为什么需要加密?因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。参考

二、HTTPS的工作过程

加密的方式有很多种,但是整体可以分为两大类:对称加密和非对称加密。

所以这里我们这里只介绍这两种,但至于到底哪个使用频率高,什么时候使用这个,什么时候使用那个,说实话目前而言我没有经验……

还是先把理论掌握好,再说区分和应用的事儿吧

我们上边已经提到了,加密和解密离不开一到多个中间数据——密钥。这里我们谈论这两种加密都是基于这个展开的。

对称加密

对称加密就是基于同一个“密钥”,使发送方将明文转换成暗文,使接收方将暗文转换成明文。

例如:一个简单的对称加密, 按位异或

假定发送方为A,接收方为B

A:假设 明文 a = 1234, 密钥 key = 8888
则加密 a ^ key 得到的密文 b 为 9834 【传输过程存在的数值就是9834】

B:针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234.

基本原理我们已经懂了,接下来,我们讨论它的可行性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fvrryZoT-1678367204054)(F:\typora插图\image-20230309191954686.png)]
理论上来讲,这是就是一次比较完整的请求传输了,已经解决了明文传输的问题。但实际上,可能会有黑客试图截获(这也叫做中间人攻击),即下边这种情况[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RcnpTkec-1678367204055)(F:\typora插图\image-20230309192214793.png)]

上边只是一个客户端的情况,但实际情况是,一个服务器同时为多台客户端服务,那么情况将会变的更复杂,很显然倘若多台客户端都使用同一个密钥,那么被篡改更是易如反掌了,所以每个客户端与服务器进行通信时都需要一个密钥,与此同时,服务器也需要对这些密钥进行管理和记录即[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSw8My1u-1678367204055)(F:\typora插图\image-20230309192932968.png)]

显然这是个很麻烦的事儿,比较理想的做法就是:在客户端和服务器建立连接的时候,双方就写上确定本次的密钥

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLK4qvpx-1678367204056)(F:\typora插图\image-20230309193038272.png)]

但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了。此时后续的加密操作就形同虚设了.
因此密钥的传输也必须加密传输!

那密钥要是还采用这个对称加密,还得重复这个思考流程,这个问题就无解了……此时,我们就引入非对称加密。

在谈论非对称加密之前,我们先梳理下思路

为了解决http明文传输问题,我们引入对称加密,有了密钥A

为了解决中间人攻击问题,我们需要对密钥A进行加密,对称加密已经不可行,需要看看非对称加密了!

非对称加密

非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥” 。

这两个密钥都是服务器生成的。客户端持有公钥,服务器持有私钥。

此时,客户端的公钥从服务器拿,黑客即使知道公钥也无济于事,因为黑客不知道私钥,私钥时服务器自己才有的,不会告诉别人。

这个时候,客户端使用公钥对对称密钥进行加密,传输给服务器,服务器就可以拿着自己的私钥来解密得到对称密钥。此时,客户端服务器就可以使用对称密钥进行后续传输了。

这可能有个疑问:为什么有了非对称加密,还要继续保留对称加密?

因为对称加密快,非对称加密快,为了效率考虑,尽可能提高整体速度,就会使用对称加密和非对称加密结合的方式。

最后,我们再重新理下思路:服务器和客户端之间安全传输其实可以分为两个部分:Part1:两者先进行密钥的安全传输 Part2:两者使用对称密钥进行交互

服务器首先生成一对公钥和私钥,客户端先到服务器那里拿到公钥,然后使用这个公钥对对称密钥(它对请求进行加密)再进行加密,因为这里对称密钥要想获取真实值,必须使用私钥进行解密,服务器内心os:诶,你拿不到,只有我有hhh 所以呢,即使黑客获得公钥也没有关系。等到这个已经被加密的密钥运到了服务器那里,服务器知道了,两者就开始使用这个对称密钥进行请求与响应了,这是只属于他们两个的小秘密。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJdmsouK-1678367204056)(F:\typora插图\image-20230309200922079.png)]

非对称加密的原理我们已经了解,那么我们这里来思考一个问题,这样是不是就完事儿了?是不是天衣无缝了?

答案是否定的。为什么呢???

试想,如果黑客入侵的中间服务器模仿终端服务器也生成一对公钥和私钥,当客户端尝试获取公钥时,黑客把自己的公钥发给它了,那么黑客有了自己的私钥,还有客户端的对称密钥,还有服务器的公钥,那么这个时候,它就是个“两面人”。

这里问题其实也叫做中间人攻击。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKLfCAJ5-1678367204057)(F:\typora插图\image-20230309202314187.png)]

因此,接下来我们要解决这两个问题,加密流程就算大功告成了!

  • 客户端如何获取到公钥?

  • 客户端如何确定这个公钥不是黑客伪造的?

最终,这两个问题其实都可以通过证书的引入解决,所以接下来我们就证书进行讨论。

数字证书

解决中间人攻击的关键,在于客户端能够辨别,当前这个公钥就是服务器真实的公钥。因此这个证书引入,本质上就是引入第三方的公证机构。

这里就等同于,我们去网吧,去旅馆,都需要验证身份,都需要身份证。身份证就等同于这里的证书,这里的第三方公证机构就是公安局。

因此,在证书引入之后,客户端获取公钥以及客户端如何确定这个公钥是不是黑客伪造这两个问题就可以解决,下边是模拟的解决校验思路:

服务器(网站)在设定之处,就需要去专门的认证机构,申请证书(有资质要求),审核通过,就会颁发证书

客户端像服务器请求公钥时,此时就不是请求单独拿一个公钥,而是把整个证书都请求过了

一旦没有证书,浏览器就会弹窗警告。或者对证书校验之后,发现不合格也不发送。

那么客户端是怎么进行证书校验的呢?

证书上边会有一个特定的字段,叫做证书的签名。

假定证书长这个样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QT7rzfKT-1678367204058)(F:\typora插图\image-20230309204352878.png)]

那么客户端就可以使用认证机构提供的公钥进行解密,解密之后,得到的结果相当于是一个hash值,记作答案A。

客户端使用相同的hash算法,针对其他字段再计算一次hash值B,倘若相同则验证成功,反之,验证失败。

这里黑客能不能再把证书篡改了呢?

不可以!!第一,换公钥不可行。客户端计算出来的A和B不同,就能察觉;第二,黑客不知道认证机构私钥,即使可以计算出hash值进行篡改了也没有包装加密生成签名的能力,这个只能认证机构做到

所以,我们基本上可以认为,这样就算可以了。

因此,有了HTTPS之后,运营商劫持没有那么猖狂了,有所收敛。

💯三、总结

基于HTTPS一个比较安全的交互过程的流程

  1. 针对业务数据,进行对称加密
  2. 让目标服务器生成一对非对称密钥,公钥1和私钥1连同证书 一同发给客户端,自己持有私钥1
  3. 客户端拿到证书进行校验,需要计算两个结果进行比对,一是拿着颁发证书的认证机构提供的公钥2对于证书中的签名进行解密,二是自己根据相同的算法计算,两者比对并进行判断,相同则验证通过,反之,验证失败
  4. 客户端拿着服务器发来的公钥1,针对对称密钥进行加密,发给服务器。

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

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

相关文章

C++基础——C++面向对象之数据封装、数据抽象与接口基础总结

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实…

打怪升级之字符串的分界符与字符串替换

流的字符串分界符 在C的iostream中,有流的字符串分界符: " “和”"都代表简单的分隔。 因此,使用流来做字符串分隔的话,有一个比较简单的方案就是将原定义的分隔符通过替换的方式变成流的分隔符。然后再录入流中就能…

【论文简述】Learning Optical Flow with Kernel Patch Attention(CVPR 2022)

一、论文简述 1. 第一作者:Ao Luo 2. 发表年份:2022 3. 发表期刊:CVPR 4. 关键词:光流、局部注意力、空间关联、上下文关联 5. 探索动机:现有方法主要将光流估计视为特征匹配任务,即学习在特征空间中将…

软件设计师教程(十)计算机系统知识-结构化开发

软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(…

Zookeeper3.5.7版本——客户端命令行操作(节点删除与查看)

目录一、节点删除示例1.1、节点删除1.2、递归节点删除二、查看节点状态示例一、节点删除示例 1.1、节点删除 在客户端上创建 test 节点,并查看该节点 [zk: localhost:2181(CONNECTED) 5] create /test "123456"删除 test 节点,并查看该节点 […

初识rollup 打包、配置vue脚手架

rollup javascript 代码打包器,它使用了 es6 新标准代码模块格式。 特点: 面向未来,拥抱 es 新标准,支持标准化模块导入、导出等新语法。tree shaking 静态分析导入的代码。排除未实际引用的内容兼容现有的 commonJS 模块&#…

Sqoop详解

目录 一、sqoop基本原理 1.1、何为Sqoop? 1.2、为什么需要用Sqoop? 1.3、关系图 1.4、架构图 二、Sqoop可用命令 2.1、公用参数:数据库连接 2.2、公用参数:import 2.3、公用参数:export 2.4、公用参数&#xff…

MySQL数据库和表管理

MySQL数据库和表管理一、常用的数据类型1、int(N)2、float(m,d)3、char与varchar二、查看数据库结构1、查看当前服务中的数据库2、查看数据库中存在的表3、查看表结构三、SQL语句1、SQL语言规范2、SQL语言分类四、创建、删除数据库和表1、创建数据库2、创建表3、删除数据表4、删…

云医疗信息系统源码(云HIS)商业级全套源代码

云his系统源码,有演示 一个好的HIS系统,要具有开放性,便于扩展升级,增加新的功能模块,支撑好医院的业务的拓展,而且可以反过来给医院赋能,最终向更多的患者提供更好地服务。 私信了解更多&…

HTTPS加密流程

什么是HTTPSHTTPS是加密后的HTTP,相当于:HTTPS HTTP SSL/TLSHTTPS是基于"密钥"来实现的,客户端将发送的数据用密钥进行加密,服务器将收到的数据用密钥解密.对称加密和非对称加密对称加密是指:交互双方共同使用同一个密钥进行加密 或 解密.如下(图中的客户端和服务器…

还不会CAD批量打印图纸?学会这招再也不怕

各位工程师,相信大家在工作过程中,经常会遇到需要打印大量图纸文件的时候,那么多的图纸,一张张打印太麻烦,此时便需要用到CAD批量打印功能啦!可是,总有些新手设计师不直达奥CAD批量打印&#xf…

Spring事务及传播机制

概念 在MySQL中介绍过,当同一时间出现一起读写数据的情况,可能会导致最终的结果出错,因此可以使用事务来提高隔离级别 而Spring中也可以实现事务 手动添加事务 使用SpringBoot中的DataSourceTransactionManager对象可以获取事务&#xff0…

计算机科学导论笔记(六)

目录 八、算法 8.1 概念 8.1.1 非正式定义 8.1.2 示例 8.1.3 定义动作 8.1.4 细化 8.1.5 泛化 8.2 三种结构 8.2.1 顺序 8.2.2 判断 8.2.3 循环 8.3 算法的表示 8.3.1 UML 8.3.2 伪代码 8.4 更正式的定义 8.5 基本算法 8.5.1 求和 8.5.2 求积 8.5.3 最大和最…

Egg:使用joi进行参数校验以及注册接口小demo

目录 前言: 准备工作: 前端代码: 后端目录截图: 1.获取参数 2.校验参数 3.查询数据库中是否已经存在该用户 4.用户入库 5.测试一哈 添加用户成功 同样的用户名再注册一遍 ​编辑总结: 前言: 在阅…

C#基础之基础语法(一)

总目录 文章目录总目录前言一、C#简述1 C#是什么?2 .Net平台3. C# 和.Net的关系4. 集成开发环境(IDE)二、控制台应用程序1. 常用代码2.注意事项三、基础语法1.编写C#代码注意事项2.C#注释2. 变量&标识符&关键字4. 变量,字…

unity 面试汇总

1、什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。2、Unity3D中的碰撞器和触发器的区别&#xff…

【C++进阶】四、AVL树(二)

目录 前言 一、AVL树的概念 二、AVL树节点的定义 三、AVL树的插入 四、AVL树的旋转 4.1 左单旋 4.2 右单旋 4.3 左右双旋 4.4 右左双旋 五、AVL树的验证 六、AVL树的性能 七、完整代码 前言 前面对 map/multimap/set/multiset 进行了简单的介绍,在其文…

2023年湖北武汉安全员C证报考条件是什么?考试题型是什么 启程别

2023年湖北武汉安全员C证报考条件是什么?考试题型是什么 启程别 武汉安全员C证报考条件: 1.注册地在本市的施工单位在职“三类人员”可申请参加安全生产考核; 2、职业道德良好,身体健康,年龄不超过60周岁&#xff08…

pdf多页合并为一页方法总结,你觉得哪个最好?

PDF格式的文件在现代办公中是不可或缺的,许多人在工作中需要频繁处理PDF文档。然而,当我们需要阅读多个PDF文件时,不断切换不同的文件并一个一个地打开查阅会非常麻烦。为了提高阅读效率,人们一般会将pdf多页合并为一页。那么&…

传输线的物理基础(四):传输线的驱动和返回路径

驱动一条传输线对于将信号发射到传输线的高速驱动器,传输线在传输时间内的输入阻抗将表现得像一个电阻,相当于线路的特性阻抗。鉴于此等效电路模型,我们可以构建驱动器和传输线的电路,并计算发射到传输线中的电压。等效电路如下图…