HTTPS协议和HTTP协议的区别详细图解

HTTPS协议

HTTP协议内容都是按照文本的方式明文传输的,是没有经过加密的,没有加密就意味着裸奔,所以协议中的内容就很容易引起一些不良人士的获取和篡改。

比如,我们想要在网上下载一个软件时,有时候,下载的软件包并不是我们想要的软件,而是其他的软件,这种情况就是对我们协议中的内容进行了篡改;

对于这种危险,所以就引入了HTTPS,HTTPS 也是一个应用层协议,是在HTTP协议的基础上引入了“加密层”,对协议内容进行了加密;

加密是什么?

加密就是把 明文(要传输的信息),经过中间一系列的转换,最后变成密文(将信息隐藏)

解密就是将 密文 经过一系列的转换,转变成明文

在 加密和解密 过程中,都需要利用一些中间数据来辅助加密或解密的过程,这些数据就称为密钥;

例如,如《水浒传》中梁山为了拉卢俊义入伙,“智多星”吴用和宋江便生出一段“吴用智赚玉麒麟”的故事来,利用卢俊义正为躲避“血光之灾”的惶恐心理,口占四句卦歌,写在卢俊义的家中:

芦花丛中一扁舟,

俊杰俄从此地游。

义士若能知此理,

反躬难逃可无忧。

暗藏“卢俊义反”四字,广为传播。结果,成了官府治罪的证据,终于把卢俊义“逼”上了梁山。

明文:芦花丛中一扁舟,俊杰俄从此地游。义士若能知此理,反躬难逃可无忧。

暗文:卢俊义反

密钥:每句话的第一个字(假设成一个工具),在明文转密文时,需要利用这个工具,密文转明文时,也需要这个工具

加密的方式有很多,但是总体主要分为两大类:对称加密 和 非对称加密

对称加密

加密和解密使用的密钥,是同一个密钥

假设密钥为key

明文 + key => 密文

密文 + key => 明文

举个简单的例子:

假设 key = 8888,info = 1234,使用按位与的方法对 info 进行加密,就得到密文b:

b = info ^ key = 1234 ^ 8888 = 9834

密文 b 再按位与 key 就得到明文 info :

info = b ^ key = 1234

对称加密如下图,在客户端这里,将请求通过密钥转换成了密文后发送给服务器,就算是在中途被黑客获取,由于黑客获取到的是密文,黑客就不容易破解,不容易拿到真的内容,就会更安全一点,服务器这边拿到密文后,通过密钥将密文进行解密,转换成明文请求

在这里插入图片描述

但是,上述的对称加密就有一个致命的问题,因为,一个服务器并不是只和一个客户端进行通信的,它可能和许多的客户端都在通信,那么,这许多的客户端密钥都是相同的吗?答案是:不是的。

如果是相同的,那么,扩散性就太大了,只要知道一个密钥,就可以解开所有的密文,这样是不行的,所以每个客户端的密钥都是不同的,那么,这样就会出现一个比较复杂的问题,就是,服务器要记录每个客户端和对应密钥的关联关系。

所以每个客户端在和服务器建立连接时,就会把密钥给产生出来(涉及到一些随机数机制在里面,保证了每个客户端生成的密钥都不同),然后,客户端再将自己的密钥通过网络传输给服务器;但是,这下就有麻烦了,**将自己的密钥通过网络通信传输给服务器,**如果密钥被黑客截获了,这不就凉了么。所以,就引入了“非对称加密”!!!

非对称加密

非对称加密 有两个密钥(一对),这俩密钥,一个称为“公钥”(公钥就是可以公开的),一个称为“私钥”(私钥是只能自己拥有),这里的加密和解密方式就是:

在这里插入图片描述

非对称加密这里就可以使用公钥加密,私钥解密 或者 私钥加密,公钥解密的方式,如下图:

1️⃣服务器会生成一对密钥,就是公钥和私钥,服务器持有私钥,客户端持有公钥

2️⃣客户端会生成对称密钥,通过公钥将对称私钥进行加密,通过网络发给服务器,就算是中间的路由设备被黑客入侵,黑客拿到的也是加密后的请求,因为公钥加密需要私钥解密,但是私钥只有服务器才有,这样就大大提高了安全性,然后,服务器收到密文请求后,利用手里面的私钥进行解密,拿到对称密钥,然后,服务器再给客户端返回响应,进行确认

3️⃣这时候,客户端和服务器就都拿到了对称密钥,在之后的通信过车中,客户端在使用对称密钥加密,服务器使用对称密钥解密,就很大程度提高了安全性;
在这里插入图片描述

既然引入了非对称加密,直接用非对称加密不就行了,为什么还要使用对称加密呢???

因为,进行非对称加密/解密,运算成本比较高,运算速度也比较低,对称加密,运算成本低,速度快。

所以,使用非对称加密,只是用来进行这种关键环节(密钥传输)的传输,后续要传输大量的业务数据,使用对称加密效率更高。

如果业务数据都使用非对称加密,整体的传输效率就会大打折扣,在TCP那里,因为可靠性带来的影响,就引入了许多机制想方设法的来提高效率,如果在应用层再使用非对称加密,那么前面提高的效率不都付诸东流了么,引入安全性,引入加密,也肯定是会影响效率的,但是,影响归影响,尽量把这里的影响降到最低。

上述的 对称加密 + 非对称加密 就已经大大提高了安全性,但是只有这些,还是不够的,上述流程还存在严重的漏洞,如果黑客利用好这个漏洞,仍然是可以获取到原始的明文数据的!!!

这里面的漏洞的就是 “中间人攻击”

过程如下:

1️⃣服务器生成公钥pub1,私钥priv1,然后将公钥发送给客户端

2️⃣在传输过程中,公钥pub1传输到被黑客入侵的设备上时,黑客自己生成了一个公钥pub2,私钥priv2,然后将公钥pub1进行替换,替换成黑客的公钥pub2,再发送给客户端

3️⃣客户端拿到公钥pub2后,使用公钥将对称密钥加密,然后再发送给服务器,在传输过程中,黑客拿到这个加密对称密钥后,因为这个对称密钥是由黑客的公钥pub2加密的,而私钥priv2也在黑客手中,所以黑客就可以获取到这个对称密钥。

4️⃣黑客获取到对称密钥后,因为服务器的公钥pub1已经被黑客截取,所以黑客再使用服务器的pub1将对称密钥加密,再发送给服务器,就这样,看着好似风平浪静,其实暗潮汹涌😐,之后进行通信时,黑客就可以拿着对称密钥对我们的数据进行解密;

在这里插入图片描述

如何解决上述中间人攻击问题呢???

之所以能进行中间人攻击,关键要点在于客户端没有“分辨能力”,客户端不知道这个公钥是不是黑客伪造的。对于这种情况,HTTPS就引入了“公证机构”,对服务器生成的公钥向公证机构提出申请(提交一些资料,例如域名,公钥,厂商等),公证机构就会进行审核,审核通过后就会给服务器颁发一个“证书”。

这个证书是计算机里的概念,不是纸质证书,就是一段结构化的数据,这段数据中就会包含一些重要信息,例如,服务器公钥,证书的过期时间,数字签名等,然后服务器就会保存好这个证书,之后客户端就不再是向服务器索要公钥了,而是索要证书,如下图讲解:

1️⃣客户端会向服务器索要证书,然后服务器返回证书给客户端

2️⃣客户端拿到证书后就对证书进行校验

证书校验的核心机制就是数字签名!!!

数字签名就是一个加密后的校验和,在公证机构给服务器颁发证书时,公证机构会针对证书中的各个属性按照一定的算法,计算出一个校验和,并且对这个校验和进行加密,就得到了这个数字签名。

这里的加密也是非对称加密,公证机构自己生成一对公钥和私钥(但是这里的公钥和私钥和服务器生成的公钥和私钥是不一样的),公证机构自己持有私钥,公钥会发布给每个客户端,而这个公钥往往都是内置在系统中的,安装了操作系统,就会自带公证机构的公钥

在这里插入图片描述

3️⃣客户端拿到证书中的“数字签名”后,使用系统内置的公证机构的公钥对数字签名进行解密,拿到最初的校验和,之后客户端再对证书中的属性按照同样的算法再进行计算,得到一个新的校验和,然后拿新的校验和和证书中的校验和进行对比,如果一致,就可以认为证书没有被篡改过,证书中的公钥就是可信的;

4️⃣接下来就可以约定对称密钥,进行网络通信了;

所以,在上述机制下,黑客就无法对证书中的内容进行篡改,即使窜开了,也很容易被发现,因为,当黑客收到证书之后,如果直接修改里面的公钥,替换成自己的公钥,那么客户端在进行校验时,校验和就会不一致,客户端就可以认为是篡改过了,这个情况相信大家也都遇见过,这种情况客户端这边往往会弹出一个对话框进行警告,当前页面存在风险;

如果黑客替换了公钥之后,能否自己在计算出一个“数字签名”呢???

答案是:不能的,因为针对校验和加密时,需要使用 公证机构 的私钥,才能进行加密,而黑客没有这个私钥,如果黑客使用自己的私钥对校验和加密,那么,客户端这边就无法使用系统中内置的公证机构的公钥进行解密;

综合上述内容,只要通过了校验,证书就是可信的,就说明了证书中的公钥就是服务器原始的公钥;

所以就可以得出结论:

HTTPS 加密 是通过:

1️⃣使用对称加密,加密业务数据

2️⃣使用非对称加密,加密了对称密钥

3️⃣使用证书,保护服务器的公钥

通过这三部分相结合,最终保证了HTTPS的安全性!!!

Cookie 和 Session的区别

网络通信过程中,使用的是HTTP协议,它是一种无状态协议,比如,在登录一个网站时,登录成功后,之后在访问这个网站的其他页面时,都需要重新登录,无法识别出当前用户是否已经登录了,不会保存用户的这个登录状态。所以,针对这种情况就是用cookie和session来保存用户的信息。

举个例子,在刚入大学时,学校就会收集新生的基本信息,例如,姓名,年龄,身份证号,手机号等,来保存到学校的教务系统中,但是,在这么多的学生信息中,学校是如何查询某个学生的具体信息呢,所以,学校就给每个学生都搞了一个学号,使得学号和学生的个人信息对应起来,在疫情那几年呢,学生进学校都需要刷学生证,通过刷学生证,在学校的教务系统中检查出来我是否是本校的学生,包括在学校内,我就可以拿着学生证去任何一个地方。所以,在这些角色里面,教务系统就相当于一个服务器,学生的信息就保存在服务器的session中,每个学生都会有一个session,学号就相当于是一个SessionId据,学生证就相当于是一个cookie,通过拿着学生证,学校就可以通过学生证中的学号从从教务系统中识别出我的身份,就能够去到学校的任何一个地方。

Cookie是浏览器持久化存储数据的一种机制,主要用来保存页面生成的数据或者服务器返回的数据,Cookie中保存的数据也是键值对的格式(用户自定义的),之后也是可以将Cookie中的值发送给服务器,然后服务器使用Cookie来完成一些业务逻辑;

所以Cookie 是客户端存储数据的机制

Session 是服务器存储数据的机制

机制,主要用来保存页面生成的数据或者服务器返回的数据,Cookie中保存的数据也是键值对的格式(用户自定义的),之后也是可以将Cookie中的值发送给服务器,然后服务器使用Cookie来完成一些业务逻辑;

所以Cookie 是客户端存储数据的机制

Session 是服务器存储数据的机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值