您的位置:首页 > 汽车 > 新车 > 网络原理——HTTP/HTTPS ---- HTTPS

网络原理——HTTP/HTTPS ---- HTTPS

2024/11/15 21:43:19 来源:https://blog.csdn.net/m0_60963435/article/details/139415091  浏览:    关键词:网络原理——HTTP/HTTPS ---- HTTPS

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗

目录

    • HTTPS
      • 加密与解密
      • HTTPS的工作流程
        • 使用对称密钥来加密
        • 使用非对称密钥 来对 对称密钥进行加密
        • 第三方公证
        • 总结

HTTPS

https本质上就是在http的基础之上 增加了加密层,抛开加密层之后,剩下的部分就和 http一样了

其中 S => SSL(安全相关的协议) 即HTTPS = HTTP + SSL

HTTPS引入的背景就是 臭臭名昭著的 运营商劫持事件
实际上,不只是运营商可以劫持,其他黑客也可以劫持,来窃取用户的信息,或者篡改请求里面的内容

试想一下,如果黑客在用户登录支付宝的时候,获取到账户余额,甚至获取到 用户的支付密码,那么后果不堪设想

因此,在互联网上,明文传输是很危险的的事情

HTTPS就是在HTTP的基础之上进行了加密,进一步来保证用户的信息安全

加密与解密

加密就是将明文(要传输的信息) 进行一系列变更之后 生成 密文
解密就是 把密文 在进行一系列变更之后 还原成 明文

这两种之间的相互转化,是通过 密钥 来实现的
即 将明文通过 密钥 转化为 密文 就是加密
将 密文 通过 密钥 转化为 明文 就是解密

而对于加密,又分为两种方式
(1)对称加密 ,指的就是 加密和解密使用的是同一个密钥.这种加密,后续进行解密的速度比较快
(2)非对称加密,指的是,此时加密解密使用的密钥是一对,分为公钥和私钥. 这种加密后续解密的速度比较慢,但是安全性更高
可以使用公钥加密,此时就是私钥解密;若通过私钥加密.此时就是公钥解密

实际上,所谓的安全都是相对的,指的实际上就是破解的成本比较高

HTTPS的工作流程

http通信本身是一个不安全的通信,为了能够保证安全,引入了加密

使用对称密钥来加密

这是相对简单的方法
在这里插入图片描述
此时黑客截获的数据,看到的是加密后的数据,无法看到原始的数据,更不用说篡改数据了

但是存在一个很大的问题

对称密钥,当存在很多个客户端的时候,客户端必须保证每一个客户端都有自己的一个密钥,与别人不一样
因为如果所有的客户端使用的都是同一个密钥,那么黑客通过自己的电脑不就也能拿到对称密钥了吗,就能够进行解密了

此时就应该让客户端自己生成一个密钥,告诉服务器就好了
在这里插入图片描述
那么问题就会出现,
这样的密钥,如果直接通过明文传输,那么后续的数据加密也就 形同虚设了
如果使用 对称密钥进行加密 ,那么就会暴露出和上面一样的问题,造成死循环

此时就要引入非对称密钥

使用非对称密钥 来对 对称密钥进行加密

实际上,为什么不直接使用非对称密钥来加密请求数据?? 本质上就是因为 非对称密钥的加密解密操作 的系统开销高很多
,消耗的时间,也比对称密钥要高很多,不太适合使用非对称密钥的方式来加密 业务数据

此时首先要做的就是对 对业务数据进行加密的对称密钥 使用非对称密钥 进行加密

此时的工作流程就是:
服务器生成一对公钥和私钥,当客户端连上服务器后,此时就将公钥告诉客户端,私钥就自己持有

在这里插入图片描述
此时,对于非对称密钥来说,所有客户端(包括黑客)拿到的公钥都是一样的,但是也是无法解密的,因为私钥在服务器手里

但是实际上,这样还是会存在问题 — 中间人攻击
在这里插入图片描述
此时关键环节就是,黑客可以自己生成一对 公钥 pub2 和 私钥 pri2
在这里插入图片描述
客户端无法区分出,当前的公钥 pub2 是不是 服务器,还是被掉包了的

客户端就会拿着pub2针对 对称密钥进行加密,并且发送给服务器

此时黑客就能拿到 密文,针对pub2 使用 pri2进行解密,从而拿到这里的 对称密钥

继续把拿到的对称密钥 通过 pub进行加密,发送给服务器

那么黑客 面对就能拿到对称密钥,扮演服务器的角色,面对服务器的时候,扮演客户端的角色,数据就泄露了

那么如何解决中间人攻击呢?? 就要引入第三方公证

第三方公证

实际上,解决中间人攻击最关键的一点就是 ,让客户端能够区分,当前来自服务器的公钥,是不是被伪造出来的公钥

解决办法就是引入第三方公证

公证机构正对客户端拿到的 公钥进行公证,此时客户端 看到这个公钥被公证了,就能认为 是这个公钥是合法的了

对于服务器,在自己的网站上线之后,就要去第三方公证机构 申请一个证书
在这里插入图片描述
其中证书里面就会包含一些信息
(1)发证机构
(2)证书的有效期
(3服务器的公钥
(4)证书的所有者
(5)持有者网站的主域名
(6)数字签名

在这里,最主要的就是这个数字签名

实际上,会根据前面的5点数据,形成一个校验和,就是基于MD5/CRC的方式,将原始数据的每个字节都带入进去,计算一遍,最终得到的一串数

数组签名就是针对这个校验和 再来一次加密,这个加密是通过 非对称密钥的形式

步骤就是,
(1)公证机构拿着一对非对称密钥 pub(公证) 和 pri(公证)
拿着pri(公证)对证书数据的校验和 进行了加密,得到了数字签名
在这里插入图片描述
此时服务器就会保存好自己申请到的证书

(2)客户端请求连接服务器的时候,服务器返回的响应里面就会包含证书
客户端就会 拿着公证机构的 公钥来进行解密
获取公证机构的公钥不是 通过网络的形式(如果通过网络的形式,就可能会出现中间人攻击)
而是操作系统内部会内置 真正的公证机构的公钥

接下来就可以拿着公证机构的公钥(来自操作系统) 来对证书里面的数字签名进行 解密了

解密之后就能拿到校验和,再自己根据证书里面的内容 计算一遍校验和

如果这两个校验和是一样的,那么就说明整个证书都是没有被篡改过的,此时证书里面的公钥就是可信的

那么为什么这种方式就能解决中间人攻击??
对于黑客来说,虽然能够和普通用户一样拿到数字签名背后的校验和
但是,拿到也没有用!!!

如果黑客修改了证书里面的公钥,那么客户端拿到经过黑客修改的证书后,计算出来的校验和 和 通过数字签名拿到的校验和 对比,就会发现不一样,判定证书非法
那如果黑客修改了公钥,并且通过修改后的内容自己计算一个新的数字签名 ??
如果这样做,由于黑客是拿不到公证机构的私钥的,只能通过自己的私钥来加密
那么用户拿到证书后,就会拿操作系统内置的公钥进行解密,.就会解密失败.因为压根就不是同一对密钥,也很会判定证书非法!!!

总结

为了保证数据的安全,不适用明文传输,而是使用对称密钥来进行加密后进行传输
那么就要保证每一个客户端都有自己对应的密钥,就可以让客户端自己生成后告诉服务器

但是这样的密钥在告诉服务器的过程,是通过网络传输的,就可能被黑客获取到
因此要进行加密,此时如果还是使用对称密钥来 对密钥进行加密,还是会暴露出上面的问题

于是引入了非对称密钥.来对 对称密钥 进行加密
但是还是会存在问题,就是 “中间人攻击”

为了解决中间人攻击,就引入了第三方公证机构

此时通过三层防护,就能保证网络数据的安全

感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 今天记得敲代码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com