认识HTTPS以及了解HTTPS的加密过程

news/2024/7/3 7:11:18

目录

简单认识HTTPS:

运营商劫持: 

加密的理解: 

HTTPS的工作过程: 

对称加密: 

非对称加密: 

中间人攻击

证书 


简单认识HTTPS:

HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层。加密层之前叫做SSL,现在叫TLS了,所以也叫SSL/TLS协议。

我们知道HTTP是按照文本的明文方式进行传输的,这就使得传输过程中容易出现被篡改的情况。提到这些我们就不得不说一下“运营商劫持”。

运营商劫持: 

运营商劫持的事情想必各位应该都遇到过,比如你想要下载一个qq音乐,正常情况下点击下载后会直接下载qq音乐,而有些情况会出现点击下载后给你下载了一个360手机助手,这就是典型的运营商劫持事件。那为什么会出现运营商劫持?为了钱!!!我们通过网络传输的数据包会经经过运营商的网络设备(如路由器,交换机等等),那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。点击下载本质上就是向服务器发送一个http请求,然后从服务器获得的http响应当中包含了下载的链接,然而运营商劫持之后,就会把给你的响应中的下载链接更换为360手机助手了。

当然,除了运营商之外也会有黑客利用相同的手段来窃取用户的隐私信息和篡改信息来谋取利益。我们都知道在互联网上进行明文传输是非常危险的,试想一下登录支付宝的时候被黑客获取到余额甚至密码有多可怕...

所以HTTPS就是在HTTP的基础上进行了加密,通过加密来进一步保障用户的信息安全。那么具体是怎么加密的呢? 

加密的理解: 

简单来说加密就是把要传输的明文,也就是要传输的信息,通过一些手段进行变换生成密文。  

解密就是把加密过的密文经过一系列的变换还原成明文的过程。

在这个加密和解密的过程中 , 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为密钥 。

举个简单的例子:比如我们经常在电视中看到的电报,当A给B发送电报的时候,为了防止电报被直接截取并破译,就会进行一个加密的操作,即使被截获了,敌人也不能在短时间内破译,但是对于AB双方来说,他们之间有一个约定,别人是不知道的,所以B得到加密的电报的时候就可以直接还原成明文了。

在这其中:

密文:发送的电报

密钥:约定

明文:电报本身要传递的信息

HTTPS的工作过程: 

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

对称加密: 

对于对称加密就是通过同一个密钥,可以把明文加密成密文,也可以把密文还原的明文。

举个例子:我们用按位异或充当一个密钥,假设明文a=1234,密钥key=8888,那么加密后的密文b=a^key=9834。针对b再次进行使用按位异或得到明文为1234。对于字符串来说也是同理,每个字符都可以表示成一个数字。这里只是简单举个例子,HTTPS当中并不是使用按位异或。

 如图:

在这个过程当中客户端发送的是通过密钥加密过的密文,即便黑客截取到了密文,不知道密钥也是无法解密的。尽管如此,我们需要注意的是,这是一个客户端的情况,如果是多个客户端呢?这个时候服务器就需要知道每个对应客户端的密钥是什么了,也就是说服务器需要记录每个客户端的密钥,不仅如此,也想要保证客户端和服务器之间能够传递密钥。但是只要就又会引出一些安全问题:

比如我们在在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥。但是这样的话黑客也就可以获取到密钥了!!!



 

如果我们直接这样传输,黑客就轻松的获得了密钥,就变得更危险了,所以我们需要对密钥的内容也进行加密!这样的话我们就需要对密钥再加一个密钥,这就出现了一个无限循环的套娃问题,就行不通了。

所以我们可以考虑使用非对称加密!  

非对称加密: 

非对称加密要用到两个密钥 , 一个叫做 " 公钥 ", 一个叫做 " 私钥 ";

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

通过公钥对明文加密, 变成密文,通过私钥对密文解密,变成明文。

也可以反着用:
通过私钥对明文加密, 变成密文
通过公钥对密文解密, 变成明文

这里举个例子: 

A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:
B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件。在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥。公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有。持有私钥的人才能解密。

对于非对称加密,服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥,此时客户端的公钥从服务器拿,黑客也会知道公钥,但是黑客不知道私钥,私钥是服务器自己的,别人没法知道。

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

由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密。

同时非对称密钥也不是绝对安全的,比如出现中间人攻击的情况。

中间人攻击

中间人攻击就类似于《毒战》中孙红雷扮演的角色,属于卧底。比如客户端向服务器发出请求,询问公钥,同时黑客在中间截获,向服务器也发出请求获取到服务器生成的非对称密钥中的公钥pub1,于是黑客将公钥告诉客户端公钥是pub2(公钥是黑客生成的非对称密钥中的),之后客户端生成对称密钥key,同时使用使用pub2对对称密钥key进行加密,准备将对称密钥发送给服务器,但由于使用的是pub2加密的key,所以黑客有相应的私钥pri2,可以进行解密,同时把对称密钥通过获取到的pub1公钥发送给服务器,这样黑客就完成了信息的获取。

如图所示:

那么怎么知道公钥是黑客的还是服务器的?(解决中间人攻击的关键)

证书 

证书本质上是引入第三方的公证机构。

服务器(网站)在设立的时候就需要去专门的机构进行认证,申请证书,审核通过会颁发证书。同时服务器生成的公钥也包含在证书中。(类似你去公安局办个身份证,身份证包含了你的各种信息) 

有证书之后,客户端向服务器请求公钥的时候,就不止是请求一个公钥了,是要把整个证书请求过来,当客户端拿到证书之后就可以对证书进行校验(看看证书是不是假的,是不是被改的,是不是无效的等等),如果发现证书无效,浏览器就会弹框报警。

证书中的签名是一个被加密的字符串,客户端可以通过认证机构提供的公钥进行解密,解密之后得到一个hash1值,然后客户端在通过同样的方法对其他字段算一次hash值得到hash2,看看hash1(从签名中接出来的)和hash2(客户端自己算的)是不是相同,相同说明有效,否则无效。同时黑客是无法进行更改证书的,比如把公钥换了,这样hash1和hash2就对不上了,就认为是无效的。而且黑客也无法重新生成签名,因为黑客不知道认证机构的私钥。

 

 


http://lihuaxi.xjx100.cn/news/1026372.html

相关文章

Web_python_template_injection(Python模块注入)

打开链接,提示是Python的模块注入 我们先了解一些基本概念: 模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这大大提升了开发效率,良好的设计也使得代码重用变得更加容…

ChatGPT文本框再次升级,打造出新型操作系统

在ChatGPT到来之前,没有谁能够预见。但是,它最终还是来了,并引起了不小的轰动,甚至有可能颠覆整个行业。 从某种程度上说,ChatGPT可能是历史上增长最快的应用程序,仅在两个多月就拥有了1亿多活跃用户&…

【ROS实操1编码实现乌龟运动控制,让小乌龟做圆周运动。】

实现分析: 1.乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点turtlesim_node,另一个是控制节点,二者是订阅发布模式实现通信的,乌龟运动显示节点直接调用即可,运动控制节点之前是使用的turtle_te…

Mongo初遇回忆录

序 上周,我和M女士分手了,也许是上个月,我不知道。也许是她太墨守成规,也许是我太肆意妄为,她说我给不了她想要的平稳和安定。她没有留下太多东西,我也不愿留下更多回忆。 做决定的过程中,我比…

nodejs+vue 沃健身房管理系统

3)系统分析 本章主要是对系统可行性、系统性能、还有系统功能需求进行分析。 (4)系统设计 对系统系统功能和数据库等进行详细讲解。 (5)系统的实现 主要对个人中心、课程分类管理、用户管理、健身器材管理、健身教练管理、预约教练管理、健身课程管理、课程订单管理、健身视频管…

AI —— 一看就懂的代码助手Copilot获取教程

背景 随着chatgpt的发布,人工智能领域近期站上了风口浪尖。GitHub Copilot由github与 OpenAI 合作创建,是世界上第一个使用 OpenAI 的 Codex 模型(GPT-3 的后代)制作的大规模生成式 AI 开发工具。GitHub Copilot 作为 AI 结对程序…

全面的VCL界面控件DevExpress VCL v22.2.5全新发布

DevExpress VCL Controls是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下…

VS 创建ATL组件(C++)

目录1、新建ATL项目2、添加接口类、实现接口方法3、创建自己的方法。在头文件Add.h中添加声明4、在源文件Add.cpp中添加函数实现5、在MyComTest.idl中添加方法接口设置,如interface IAdd:IDispatch中所示。6、解决方案配置选择release, 平台选择x64,生成。MyComTest…