HTTPS是HTTP的孪生兄弟,HTTPS在HTTP的基础上,引入了一个加密层。
为什么要引入这个加密呢?
因为当年存在着臭名昭著的“运营商劫持”。
正常的下载情况:
被运营商劫持了的下载情况:
被劫持后这里下载了某Q浏览器,为什么呢?原因一目了然。
所以,为了避免这个问题,就引入了HTTPS,用来对传输数据加密。
对于加密,这里解释三个名词:
- 明文:要传输的原始信息
- 密文:原始信息背后的秘密,要密钥才能解开
- 密钥:解开明文背后密文的钥匙
接下来,我们简单模拟一下加密的实现过程。
HTTPS中引入的加密层,称为SSL,或者最新也叫TLS
在其中,涉及的加密操作,主要是两种方式:
- 对称加密
- 非对称加密
对称加密就是客户端和服务器都使用同一个密钥,这个密钥既能加密,也能解密。
在网络上传输的是密文,服务器收到密文后,需要用密钥解开。
但是如何保证客户端和服务器持有同一个密钥呢?尤其是一个服务器对应了很多客户端的时候。
这时就需要每个客户端都有一个不同的密钥,否则黑客很简单就能获取公共密钥。
所以这里就需要客户端主动生成密钥给服务器,或者服务器生成密钥告诉客户端。
反正这个密钥会在网络上传输,如下:
既然密钥都在网络上传输了,那么黑客又很简单获取了。
所以想要传密钥,还需要对密钥进行加密。
如何对密钥加密呢?这里就需要引入非对称加密。
非对称加密有两个密钥,分别叫做公钥和私钥。
公钥,人人都能看见,用来加密。私钥,只有自己才知道,用来解密。
比如小区里的信箱,快递小哥有个锁头,你有这个信箱的钥匙。
锁头能把信塞进信箱,只有你才能用钥匙打开信箱。
在这里客户端和黑客都有公钥,只有服务器有私钥。
客户端可以用这个公钥,给密钥加密。这样黑客拿到密钥也没有私钥解密。
上述操作看似完美,但是任有缺陷,叫做“中间人攻击”。
首先,客户端会问服务器公钥是啥。
服务器会返回一个公钥。
在这个返回的途中,黑客可以自己生成一个公钥和私钥。
于是,黑客将自己的公钥返回给客户端,客户端拿这个公钥加密密钥后要传输出去。
黑客拿到后,就可以用自己的私钥来解密,于是拿到了密钥。
为了伪装,再用之前服务器的公钥给密钥加密,再给服务器。
服务器就不知道发生了啥,却“正常”地收到了看似没问题地密钥。
上述过程就是“中间人攻击”。
为了解决这个问题,关键就在于客户端要知道这个公钥是服务器的,不是伪造的。
于是就出现了第三方的公信机构,由他们给服务器一个独一无二的证书。
这样服务器传送公钥的时候,会一起把这个证书传给客户端。客户端看到证书才会加密。
黑客虽说也能仿造证书,但是证书也有认证机制,客户端也可以向公信机构求证。
有的客户端内部还自带公信机构的信息,这样就能进行本地认证,更加快速。
感谢你能看到这ヽ( ̄ω ̄( ̄ω ̄〃)ゝ