前言
本篇博客将详细介绍HTTPS,在此之前介绍过HTTP,有关于HTTP的问题可以先去看《一网打尽HTTP协议:从报文格式到Header/状态码,附带经典面试题精讲》
🖥 文章专栏
若有问题 评论区见
🎉欢迎大家点赞👍收藏⭐文章

一.HTTPS是什么
当前网络上,主要都是 HTTPS 了,很少能见到 HTTP,实际上 HTTPS 也是基于 HTTP.(前面讲过的 HTTP 的各个方面的内容,对于 HTTPS 同样适用)
只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制,引入 HTTPS 防止你的数据被黑客篡改 (尤其是反针对 运营商劫持)
HTTP 当前很少有直接使用的了.一般都是使用 HTTP 的加强版 HTTPS.(加密)
二.加密是什么,怎么加密
说到底是怎么加密的呢???先举个栗子
在洋务运动时期,慈禧和恭亲王奕䜣都属于顽固派,有一天恭亲王奕䜣打听到有几个大臣要造反,这时候恭亲王奕䜣就给慈溪写了一篇折子,直接看就没什么不一样,就是普通的唠唠家常(也就是明文)


这时,只需要把带有窟窿的纸盖上,就得到了密文,带有窟窿的纸能够把密文还原成明文,也能够把明文转成密文,窟窿的纸也就是密钥
明文 + 密钥 => 密文
密文 + 密钥 => 明文
三.HTTPS 的⼯作过程
既然要保证数据安全, 就需要进⾏ "加密",⽹络传输中不再直接传输明⽂了, ⽽是加密之后的 "密⽂".加密的⽅式有很多, 但是整体可以分成两⼤类: 对称加密 和 ⾮对称加密
3.1对称加密:
加密和解密,使用的密钥 是同一个密钥,设密钥为key 明文 + key => 密文,密文 + key =>明文
事实上,这里的加密和解密,涉及到一系列复杂的数学运算 (密码学本质上是数学问题,这里不做深入研究)

仔细思考,上面的模型存在一个重要问题,服务器不是只和一个客户端通信, 而是和很多客户端通信,这些客户端使用的 对称密钥 是相同的嘛?
很明显,必须要求每个客户端的密钥都不相同,彼此之间才不知道对方的密钥是啥

此时要求每个客户端对应的密钥都不同.现在就需要每个客户端,在和服务器建立连接的时候,就把密钥给生成出来 (涉及到一些随机数机制在里面,保证每个客户端生成的密钥都不同)客户端再把自己的密钥通过网络传输给服务器
这时候有问题了,如果在网络传输过程中密钥被黑客截获了,这不也就凉了???

此时,黑客就知道了通信的密钥,后续传输的加密数据,黑客就可以很轻松的进行解密~,此时的加密过程,就没什么卵用了~~~
如何让密钥更安全的到达服务器呢??需要针对密钥进行加密~.
是否是再搞一个密钥2,使用密钥2 对上面的密钥进行加密呢??(此时,还得想办法把密钥2 也传输给服务器),无论引入多少个密钥,你套上几层娃,都有泄露的风险~~~
3.2非对称加密
为了解决上述安全传输密钥的问题,引入了"非对称加密"
有两个密钥(一对)这俩密钥,一个称为“公钥”,一个称为"私钥"(公钥就是可以公开的,私钥就是自己藏好的),明文 + 公钥 => 密文,密文 + 私钥 =>明文或者明文 + 私钥 =>密文 密文 + 公钥 =>明文,总的来说用一个钥匙加密,就用另一个要是解密

既然已经引入了非对称加密,为啥还需要引入对称加密呢?
进行非对称加密/解密,运算成本是比较高的.运算速度也是比较低的.对称加密,运算成本低, 速度快.使用非对称加密,只是用来进行这种关键环节 (传输密钥)(一次性的工作,体积也不大),成本就比较可控,后续要传输大量的业务数据,都使用效率更高的对称加密,比较友好的做法.引入安全性,引入加密,也势必会影响到传输效率,我们也是希望让这样的影响能尽可能降到最低~~
上述 对称加密+非对称加密 过程就是 HTTPS 的基本盘,但是光有这些还不够,上述流程还存在一个严重的漏洞,黑客利用这个漏洞,仍然可以获取到原始的明文数据~~~
3.3中间人攻击

在客户端这边,不知道pub2是黑客的,以为就是服务器呢,于是就使用pub2针对对称密钥进行加密,接下来,客户端继续使用对称密钥进行上述数据传输。
在黑客入侵的设备这边,黑客自己也生成一对非对称密钥,其中公钥pub2,私钥pri2,黑客收到加密的对称密钥之后,因为这个密钥是pub2加密的,需要pri2进行解密,黑客手里当然有pri2(他自己生成的),黑客解密之后就拿到了对称密钥,并且使用服务器刚才的pub1重新对对称密钥进行加密,进一步的发送给服务器.
重新使用 pub1 加密, 就是为了 瞒天过海,不要让服务器发现其中的端倪~~,由于对称密钥,黑客在刚才的过程中,已经拿到了,所以此时加密传输的数据对于黑客来说已经一览无余了
3.4“证书”解决中间人攻击问题
如何解决上述的中间人攻击问题?
之所以能进行中间人攻击,关键要点在于客户端没有"分辨能力"客户端不知道当前这个公钥是不是黑客伪造的!!
这里的"分辨”不能靠"自证”(谁都是说自己是真的),引入第三方的可以被大家都信任的"公证机构"公证机构说这个公钥是正确的,不是被伪造的,我们就是可以信任的~~

这是 计算机 中的"证书"不是纸质的就是一段结构化的数据,这段数据中就会包含一些重要的信息,比如:域名,服务器公钥,证书的过期时间......
颁发证书的时候,公证机构,就会针对证书中的各个属性,计算出一个校验和,并且针对这个校验和进行加密,就得到了数字签名.这里面的加密也是非对称加密.公证机构,自己生成一对公钥和私钥(和服务器的公钥私钥不一样)公证机构就会自己持有私钥,公钥就会发布给各个客户端设备(往往公钥都是内置到系统中的,安装了操作系统, 就会自带公证机构的公钥)
客户端拿到了这个证书,也就拿到了证书中的公钥,客户端就需要验证这个公钥是否是服务器最初的公钥(是否是被黑客篡改了??)
这个过程, 就称为"证书的校验"如何进行校验?核心机制,就是"数字签名"=> 被 加密 后的校验和
拿着你数据的每个字节,带入公式,就能算出一个结果数字,称为校验和,把这个数据和校验和一起发送给对方.对方再按照同样的方式再算一遍校验和,
如果对方自己算的校验和和收到的校验和一致,就认为数据在传输过程中,没有改变过~
此时, 客户端拿到了数字签名,就可以通过系统内置的公证机构的公钥,进行解密,得到了最初的校验和,客户端再 重新 计算一遍 这里的校验和, 和解密出来的校验和进行对比如果校验和一致,就可以认为证书没有被篡改过,公钥就是可信的 (服务器原始的公钥)
在上述机制下,黑客就无法对证书内容进行篡改了.即使篡改,也很容易被发现.当黑客收到证书之后,如果直接修改里面的公钥,替换成自己的,客户端在进行证书校验的时候,就会发现校验和不一致了!! 客户端就可以认为是篡改过了.(客户端这边往往就会弹出一些对话框来警告用户,存在安全风险)
结合上述过程,证书就是可信的,通过了校验,就说明公钥就是服务器原始的公钥了
黑客是否能自己也申请一个证书,完全替换掉,服务器的证书呢??
行不通的!! 申请证书, 需要提交资料,其中就有网站的主域名~,认证机构自然就会认证这个域名是否是你所有的~
1922

被折叠的 条评论
为什么被折叠?



