前言
大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。
相信大家平时肯定经常跟 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层
参考
结语
我是林三心,一个热心的前端菜鸟程序员。如果你上进,喜欢前端,想学习前端,那咱们可以交朋友,一起摸鱼哈哈,摸鱼群