🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!欢迎志同道合的朋友一起加油喔🤺🤺🤺
目录
1.HTTPS 是什么
1.1 运营商劫持
1.2 关于加密过程中的名词
2. HTTPS 的工作过程
2.1 对称加密
2.2非对称加密
1.HTTPS 是什么
HTTPS 也是一个应用层协议 . 是在 HTTP 协议的基础上引入了一个加密层 ,称为SSL
(旧的叫法)或TLS
(新的叫法)
HTTP 协议内容都是按照文本的方式明文传输的 . 这就导致在传输过程中出现一些被篡改的情况
1.1 运营商劫持
什么叫运营商劫持?
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备 ( 路由器 , 交换机等 ), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改 .
假如我用我的浏览器去下载 qq 音乐, 我的数据就经过了运营商设备, 结果运营商设备把这个下载链接进行了替换, 于是我下载的就是一个 qq 浏览器了, 像这种行为就叫做运营商劫持.
运营商为什么要劫持呢 ? (被金钱蒙蔽了双眼)
不光是运营商可以劫持到咱们的数据, 黑客也是有可能劫持到的!!!
比如, 黑客黑入了某个路由器, 这个时候就可能获取到所有经过路由器的网络数据报!!
1.运营商路由器可能会受到攻击. 2. 公共场合的 wifi 也是被攻击的对象. 如果此时我们在公共场合继续在网络上进行明文传输, 那么你的账号密码就有可能被窃取了....
如何保证数据不被窃取? 我们无法阻止黑客入侵路由器, 但是可以想办法对数据进行加密, 即使被窃取,,, 他也不知道是什么意思.
1.2 关于加密过程中的名词
- 明文就是传输的原始数据
密文
就是经过加密后的数据,别人看到了也看不出啥结果加密
就是把明文经过一系列转换变成密文解密
就是把密文经过一些列转换变成明文- 加密和解密过程需要一个辅助数据,该数据称为
密钥
2. HTTPS 的工作过程
加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密.
如果加密和解密过程中, 使用的密钥是同一个, 就叫做 "对称加密".
如果加密和解密过程中, 使用的是不同的密钥, 就叫做 "非对称密钥".
2.1 对称加密
客户端和服务器持有同一个密钥。客户端传入的数据(HTTP请求的header和body)都通过这个密钥进行对称加密,实际上在网络传输过程中,传递的是密文,服务器在收到密文后,接下来就可以根据刚才的密钥,来进行解密,从而拿到明文。
像上图中, 由于数据是加密的, 黑客并不知道明文是什么.
但是黑客不知道明文是什么的前提是, 他不知道密钥是什么, 如果黑客知道了密钥是什么, 就还是能够破解的.
客户端和服务器使用的密钥, 是一个啥样的密钥? 服务器不只是和一个客户端交互, 是同时和一堆客户端进行交互的, 针对这么多客户端, 使用的是相同的密钥, 还是不同的密钥呢?
如果是相同的密钥, 黑客只要伪装成一个客户端就可以拿到这个密钥了..于是每个客户端, 在和服务器连接的时候, 就自己生成一个密钥.(每个客户端的密钥各不相同)
由于服务器同一时刻要给很多客户端提供服务, 并且每个客户端的密钥又是不同的, 因此服务器就需要维护与每个客户端的之间的密钥关系, 就显得相当麻烦....
所以, 理想的做法是, 在客户端与服务器建立连接的时候, 双方就协商好这次的密钥是什么, 后续再进行数据传输的时候, 就都用这个密钥加密解密.
在这里,是假设成为客户端生成的密钥,通过网络来告诉服务器的过程。客户端生成了密钥123456,客户端就告诉服务器,咱的密钥是123456。
但是这样同时存在着问题,要是设备早就被黑客入侵了,并且是明文传输的话,黑客很容易就拿到了,在黑客知道密钥之后,哪怕你后面加密,内容也很容易拿到,毕竟相当于已经有了破解密码一样。因此,我们发现使用对称加密最大的问题在于密钥能够传的过去,并且不能是明文传递的,如果此时使用另一个密钥对该密钥进行加密, 那 密钥2 该如何传输? 此时密钥的传输再使用对称加密就行不通了, 就需要引入非对称加密了..
2.2非对称加密
①什么是非对称加密:
非对称加密,有两个密钥,分别叫做公钥(pubic key)和私钥(private key)。
所谓公钥就是指人人都能够获取到的密钥。而私钥是指只有自己能够获取到的密钥。
在这里我们可以利用公钥加密,私钥解密,也可以利用公钥解密,私钥加密。
基于非对称加密,就是让服务器自己生成一堆公钥和私钥,公钥发出去(人人都可以拿到),私钥自己保存。
客户端生成一个对称密钥,客户端就可以使用服务器的公钥,对对称密钥进行加密,然后把数据传给服务器,服务器再通过私钥进行解密。
②具体过程图:服务器自己持有私钥,客户端持有公钥,黑客可以拿到公钥,但是却拿不到私钥。而客户端生成了对称密钥,就可以基于刚刚的公钥对对称密钥进行加密,如果黑客拿到了这个密文,由于他没有私钥,那么是不能够进行解密的,也就是不知道对称密钥是啥 。
由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密.
③缺点:
在服务器把自己的公钥返回给客户端时,被黑客这个中间人进行拦截,他自己生成了一对公钥与私钥
正常情况如下:
当黑客进行侵入时(中间人攻击时):
具体过程如下:
首先客户端发出请求知道公钥,这个时候服务器按道理来说应该返回公钥,但是却被黑客入侵了,黑客自己就生成了一对公钥和私钥public key2和private key2,把此时的public key2作为公钥返回给了客户端,此时客户端继续操作通过123456+public key2得到了对称密钥密文,并返回给服务器,这个时候被黑客再次拦截,并用private key2来进行解密,黑客就拿到了密匙123456,紧接着,为了不暴露身份,黑客又按照服务器开始返回的public key公钥对密钥123456重新加密返回给服务器,而此时服务器通过private key进行解密也能够得到密钥123456。并且其根本不知道黑客的存在。
后续客服端再传输数据都是使用对称密钥加密,黑客就可以通过获取的对称密钥解析数据.
④解决方式:
- 在客户端和服务器刚建立连接的时候 , 服务器给客户端返回一个 证书 .
- 这个证书包含了刚才的公钥 , 也包含了网站的身份信息.
"证书" 机制, 就相当于引入了一个认证机构 , 就像公安局一样是可信的, 然后服务器需要向认证机构申请一个证书, 认证机构就会审核服务器的资质. (此处的证书就是一个加过密的字符串 和服务器的域名)
这就好比你想开一家公司, 你得去工商局办理营业执照, 工商局就会审核你的资料, 看你符不符合国家要求, 审核资质通过后才会给你颁发证书.
经过引入证书机制后, 黑客如果还想 "狸猫换太子", 就得去认证机构申请证书 (伪造证书), 但是伪造的证书很容易鉴别真伪, 客户端自己内置了一些证书 (提高访问速度), 就可以对比证书内容 (字符串) 和 对比服务器域名, 如果证书内容被篡改过或者域名对不上, 此时客户端访问服务器, 浏览器就会弹框提示: 你要访问的页面证书不匹配 / 域名不匹配, 或者你要访问的页面存在风险, 这时候, 客户端这边就会提高警惕了!!
====================================================================
说到这, 其实抓包工具 Fiddler 也是在进行中间人攻击. 我们首次勾选 Fiddler 的 https 的时候, 提示是否要安装一个 XXX证书, 这个证书就是 Fiddler 为了进行中间人攻击, 自己生成的证书. 所以我们得安装了这个证书, 浏览器才会信任 Fiddler , 浏览器才不会弹框.
上述这些过程, 并不是 HTTPS 独有的. 这个过程是 SSL / TLS 的加密流程. HTTPS 就是 HTTP + SSL, 其他的协议也可能使用 SSL.