我画了13张图,用最通俗易懂的话讲HTTPS,拿下!

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。

相信大家平时肯定经常跟HTTPS打交道,比如请求接口、访问网站等等。。那我们也会经常思考:

  • HTTPS是啥?
  • HTTPS跟HTTP是什么关系呢?
  • 为什么现在的网站都是HTTPS而不是HTTP呢?

HTTPS 是啥啊?

HTTPS其实就是HTTP + SSL/TLS,至于什么是HTTP,这不在今天咱们的讨论范围内,而什么是SSL/TLS呢?其实就是SSL或TLS,这两个都是加密安全协议,而SSLTLS的前身,现在大部分浏览器都不支持SSL了,所以现在TLS用的比较广泛,但因为SSL名气比较大,所以还是统称SSL/TLS。那为啥要用HTTPS呀,因为HTTP是明文传输,不安全,而HTTP + SSL/TLS比较安全,也就是HTTPS比较安全

对称加密

是什么?

什么是对称加密呢?我举个例子,你跟你女朋友聊天,不想让别人知道你们在聊什么,所以你跟你女朋友约定好:双方发送的消息都是倒序的,收到对方的消息后,需要倒序一下才能看到真正的消息:

截屏2021-12-15 下午9.34.27.png

这个所谓的约定,其实就相当于双方各自的一把相同的钥匙,只有这把钥匙才能知道双方之间发送的消息到底是什么,由于双方的钥匙是一样的,所以也称为对称加密

截屏2021-12-15 下午9.41.55.png

缺点?

一开始,双方肯定要协商这把钥匙(秘钥)到底应该是什么样,而这个过程可能会被黑客监听到,一旦有第三个人知道这把钥匙,那么你们两的信息,很容易被中途被黑客被破解,并伪造信息,这样的话,那对方可能收不到你的信息,收到的是黑客伪造的信息,比如下方例子,你发的是哈哈哈哈哈哈,对方收到的确是嘻嘻嘻

截屏2021-12-15 下午9.53.02.png

非对称加密

公钥和私钥

现在,在服务端,生成两个钥匙钥匙A、钥匙B,并且这两把钥匙之间是有联系的:钥匙A加密的东西只能使用钥匙B来解密,然后服务端把这把钥匙A发给客户端,每次客户端发信息都需要使用钥匙A进行加密,然后发到服务端,服务端再用钥匙B进行解密,得到客户端发来的信息:

截屏2021-12-15 下午10.46.41.png

扫描二维码关注公众号,回复: 13619676 查看本文章

其实这里,钥匙A就是公钥,因为客户端、服务端都知道,而钥匙B就是私钥,因为从始至终,钥匙B都在服务端处,非常安全

非对称加密

非对称加密就是基于公钥、私钥的一种加密方式,非对称加密相比于对称加密安全性较强,因为黑客只可能知道公钥,而不可能知道私钥,而公钥加密的数据只能使用私钥解密,所以黑客盗取公钥后也解密不了客户端发给客户端的信息

截屏2021-12-15 下午10.50.27.png

缺点

咱们刚刚说了非对称加密相比于对称加密安全性较强,但非对称加密也是有缺点的。咱们说了,一开始服务端生成了公钥、秘钥,然后把公钥发给客户端,而私钥一直放在服务端。那么在把公钥传给客户端的过程,可能会被黑客拦截获取到这个公钥,并且黑客伪造了黑客版公钥、黑客版私钥,并且把黑客版公钥发给客户端,客户端是不知情的,传数据时用黑客版公钥加密数据并发送,此时黑客只需要用黑客版私钥解密得到客户端发送的信息,并且伪造自己的黑客信息,并使用原本的公钥加密,再发给服务端,服务端再使用原本私钥进行解密,得到黑客信息

1639624295(1).png

HTTPS是哪种加密?

其实HTTPS是使用对称加密 + 非对称加密,咱们继续往下看吧!

证书

我们刚刚说了非对称加密也是有缺点的,那怎么预防这个缺点呢?这个时候我们就需要向证书颁发机构(CA)申请证书

证书的组成

1639625257(1).jpg

步骤

1、服务端将公钥发给证书颁发机构,向证书颁发机构申请证书

1639625547(1).jpg

2、证书颁发机构自己也拥有一对公钥、秘钥,使用公钥加密了key1,同时根据服务端网址生成一个证书签名,且也使用秘钥加密这个证书签名。并制作成证书,将此证书发送给服务端

1639627133(1).jpg

3、当客户端与服务端通信时,服务端不再是直接把服务端私钥传给客户端,而是将刚刚的证书传给客户端

1639627366(1).jpg

4、当客户端收到证书后,会对此证书进行辨别真伪。提前说明一下:当今的浏览器对各大证书颁发机构的名称和对应的机构公钥都进行了存储。所以客户端收到证书后,只需要从浏览器本地找到对应的机构公钥,对证书签名进行解密,然后客户端根据这个解密后的签名规则,自己也生成一个证书签名,如果两个签名一致,则通过。通过之后,客户端再次使用机构公钥解密出服务端公钥key1

1639628897(1).jpg

5、客户端自己生成一个对称秘钥key2,然后使用手上已有的服务端公钥key1key2进行加密,并发送给服务端,服务端收到之后,使用服务端秘钥进行解密,这个时候,客户端和服务端就同时拥有对称秘钥key2

1639629373(1).jpg

6、从这之后,客户端和服务端就通过对称秘钥key2来进行对称加密的通信,也就是回到了之前第一个场景,你跟你女朋友使用倒序算法进行加密通话,只不过这个倒序算法证书的保证下,不会被第三方黑客所知道了,只要你跟你女朋友,以及证书颁发机构知道:

截屏2021-12-15 下午9.34.27.png

证书会被拦截吗?

其实就算证书被拦截了也没用,因为证书中的签名是根据服务端网址生成的,且使用证书颁发机构秘钥进行加密的,是无法篡改的。或者黑客直接造个假证书发给客户端,但这也是没用的,毕竟浏览器早就维护了合法的证书颁发机构的合集,黑客可不在这个合集里哦~~~~~

SSL/TLS

之前说了HTTPS = HTTP + SSL/TLS,而上述所说的一系列操作,就是发生在SSL层

image.png

注:最新推出的TLS协议,是SSL 3.0协议的升级版,和SSL协议的大体原理是相同的。

参考

结语

我是林三心,一个热心的前端菜鸟程序员。如果你上进,喜欢前端,想学习前端,那咱们可以交朋友,一起摸鱼哈哈,摸鱼群,点这个 --> 摸鱼沸点

image.png

猜你喜欢

转载自juejin.im/post/7042158171778973732