前言
大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。
相信大家平时肯定经常跟HTTPS
打交道,比如请求接口、访问网站
等等。。那我们也会经常思考:
HTTPS
是啥?HTTPS
跟HTTP是什么关系呢?- 为什么现在的网站都是
HTTPS
而不是HTTP
呢?
HTTPS 是啥啊?
HTTPS
其实就是HTTP + SSL/TLS
,至于什么是HTTP
,这不在今天咱们的讨论范围内,而什么是SSL/TLS
呢?其实就是SSL或TLS
,这两个都是加密安全协议
,而SSL
是TLS
的前身,现在大部分浏览器都不支持SSL
了,所以现在TLS
用的比较广泛,但因为SSL
名气比较大,所以还是统称SSL/TLS
。那为啥要用HTTPS
呀,因为HTTP
是明文传输,不安全,而HTTP + SSL/TLS
比较安全,也就是HTTPS
比较安全
对称加密
是什么?
什么是对称加密
呢?我举个例子,你跟你女朋友聊天,不想让别人知道你们在聊什么,所以你跟你女朋友约定好:双方发送的消息都是倒序的,收到对方的消息后,需要倒序一下才能看到真正的消息:
这个所谓的约定
,其实就相当于双方各自的一把相同的钥匙
,只有这把钥匙
才能知道双方之间发送的消息到底是什么,由于双方的钥匙
是一样的,所以也称为对称加密
:
缺点?
一开始,双方肯定要协商这把钥匙(秘钥)
到底应该是什么样,而这个过程可能会被黑客监听到,一旦有第三个人知道这把钥匙
,那么你们两的信息,很容易被中途被黑客被破解,并伪造信息,这样的话,那对方可能收不到你的信息,收到的是黑客伪造的信息,比如下方例子,你发的是哈哈哈哈哈哈
,对方收到的确是嘻嘻嘻
:
非对称加密
公钥和私钥
现在,在服务端,生成两个钥匙钥匙A、钥匙B
,并且这两把钥匙之间是有联系的:钥匙A
加密的东西只能使用钥匙B
来解密,然后服务端把这把钥匙A
发给客户端,每次客户端发信息都需要使用钥匙A
进行加密,然后发到服务端,服务端再用钥匙B
进行解密,得到客户端发来的信息:
其实这里,钥匙A
就是公钥
,因为客户端、服务端都知道,而钥匙B
就是私钥
,因为从始至终,钥匙B
都在服务端处,非常安全
非对称加密
非对称加密
就是基于公钥、私钥
的一种加密方式,非对称加密
相比于对称加密
安全性较强,因为黑客只可能知道公钥
,而不可能知道私钥
,而公钥
加密的数据只能使用私钥
解密,所以黑客盗取公钥
后也解密不了客户端发给客户端的信息
缺点
咱们刚刚说了非对称加密
相比于对称加密
安全性较强,但非对称加密
也是有缺点的。咱们说了,一开始服务端生成了公钥、秘钥
,然后把公钥
发给客户端,而私钥
一直放在服务端。那么在把公钥
传给客户端的过程,可能会被黑客拦截获取到这个公钥
,并且黑客伪造了黑客版公钥、黑客版私钥
,并且把黑客版公钥
发给客户端,客户端是不知情的,传数据时用黑客版公钥
加密数据并发送,此时黑客只需要用黑客版私钥
解密得到客户端发送的信息,并且伪造自己的黑客信息
,并使用原本的公钥
加密,再发给服务端,服务端再使用原本私钥
进行解密,得到黑客信息
HTTPS是哪种加密?
其实HTTPS
是使用对称加密 + 非对称加密
,咱们继续往下看吧!
证书
我们刚刚说了非对称加密
也是有缺点的,那怎么预防这个缺点呢?这个时候我们就需要向证书颁发机构(CA)
申请证书
了
证书的组成
步骤
1、服务端将公钥
发给证书颁发机构
,向证书颁发机构
申请证书
2、证书颁发机构
自己也拥有一对公钥、秘钥
,使用公钥
加密了key1
,同时根据服务端网址生成一个证书签名
,且也使用秘钥
加密这个证书签名
。并制作成证书
,将此证书
发送给服务端
3、当客户端与服务端通信时,服务端不再是直接把服务端私钥
传给客户端,而是将刚刚的证书
传给客户端
4、当客户端收到证书
后,会对此证书
进行辨别真伪。提前说明一下:当今的浏览器对各大证书颁发机构的名称和对应的机构公钥都进行了存储。所以客户端收到证书
后,只需要从浏览器本地找到对应的机构公钥
,对证书签名
进行解密,然后客户端根据这个解密后的签名规则
,自己也生成一个证书签名
,如果两个签名
一致,则通过。通过之后,客户端再次使用机构公钥
解密出服务端公钥key1
5、客户端自己生成一个对称秘钥key2
,然后使用手上已有的服务端公钥key1
对key2
进行加密,并发送给服务端,服务端收到之后,使用服务端秘钥
进行解密,这个时候,客户端和服务端就同时拥有对称秘钥key2
6、从这之后,客户端和服务端就通过对称秘钥key2
来进行对称加密的通信,也就是回到了之前第一个场景,你跟你女朋友使用倒序算法
进行加密通话,只不过这个倒序算法
在证书
的保证下,不会被第三方黑客所知道了,只要你跟你女朋友,以及证书颁发机构
知道:
证书会被拦截吗?
其实就算证书
被拦截了也没用,因为证书
中的签名
是根据服务端网址生成的,且使用证书颁发机构
的秘钥
进行加密的,是无法篡改的。或者黑客直接造个假证书发给客户端,但这也是没用的,毕竟浏览器早就维护了合法的证书颁发机构
的合集,黑客可不在这个合集里哦~~~~~
SSL/TLS
之前说了HTTPS = HTTP + SSL/TLS
,而上述所说的一系列操作,就是发生在SSL层
注:最新推出的TLS协议,是SSL 3.0协议的升级版,和SSL协议的大体原理是相同的。
参考
结语
我是林三心,一个热心的前端菜鸟程序员。如果你上进,喜欢前端,想学习前端,那咱们可以交朋友,一起摸鱼哈哈,摸鱼群,点这个 --> 摸鱼沸点