目录
一、什么是HTTPS
HTTPS是基于HTTP的一个协议,比HTTP多了一个“加密层”,简单来说,HTTPS=HTTP+加密层
二、为什么要有HTTPS
运营商劫持
HTTPS设计的初衷,是为了解决像运营商劫持这种臭名昭著的问题。在早期的互联网时代,用户下载网络资源大多在一些官方网站,例如你要在官网下载一个网易云音乐,未被劫持的效果,就是点击下载按钮后,下载网易云音乐
而运营商劫持之后,点击下载网易云音乐,下载来的成了qq音乐,这种通过替换下载地址修改数据内容的操作,就是运营商劫持
并非只有运营商可以修改数据,很多人都可以修改,在复杂的网络环境中,处处充满危险,而HTTP这个协议,在网络传输中都是明文传输的,这就有很大的安全隐患,所以为了改善这个问题。HTTPS就应运而生了
三、加密
加密是HTTPS针对HTTP的各种header,body进行加密
对称加密
对称加密:指通过一个密钥来进行加密解密
明文+key=密文
密文+ket=明文
特点是比较迅速,计算起来比较快
这是传输过程,假如现在存在一个黑客要获取数据
如果黑客没有key,那么很显然黑客就无法获取两方传输的数据,安全性大大提高,但对称加密也存在一个隐患:黑客是可以获取key的
一个服务端要同时对多个客户端进行服务,很显然,每个客户端的key都是不同的,在客户端连接服务端之前,需要自己生成一个key,然后在第一次连接服务端时,通过网络传输把key给传输给服务端,随后服务端记住这个客户端的key,随后基于这个key对此客户端进行数据传输的加密解密,但是在第一次传输key时,是明文传输的,也就是说,这个key仍然有被黑客截获的危险,一旦黑客截获了key,那么加密就形同虚设了
所以为了解决这个问题,我们就需要引入非对称加密
非对称加密
非对称加密:指通过两个密钥来进行加密解密
其中一个叫做公钥(pub),一个叫做私钥(pri)
明文 + pub = 密文
密文 + pr = 明文
特点是更加安全,但是计算起来比对称加密更慢
这是非对称加密的加密过程
- 1.由服务端生成一对公钥私钥
- 2.客户端向服务端发起请求,获取公钥
- 3.客户端生成key,并通过公钥对其进行加密
- 4.服务端获取到了key,并通过私钥进行解密,拿到了客户端的key
- 5.即使有黑客截获了全部的发送过程,但私钥从始至终都没有通过网络明文传输,黑客只能获取公钥和被公钥加密后的key,但是没有私钥无法进行解密也就无法获取key,但是客户端和服务端都拿到了key
- 6.从此以后双方仍使用对称加密进行通信
但正所谓道高一尺,魔高一丈,即使是上述看似天衣无缝的加密过程,仍然有被破解的风险
中间人攻击
这是中间人攻击的流程
当客户端向服务器获取公钥pub1时,黑客自己生成一对新的公钥pub2和私钥pri2,同时将pub2发送给客户端,然后客户端使用pub2对key进行加密,黑客拿到之后使用pri2进行解密,这样黑客就拿到了key,然后黑客在将key使用pub1进行加密转发给服务端,这个过程中,双方都没有感知到黑客的存在,黑客神不知鬼不觉的拿到了key,这就是中间人攻击
引入证书
虽然魔高一丈,但道还可以“再高一尺”。为了避免中间人攻击这种数据泄漏的风险,还可以通过引入证书的方式,来保证传输的安全
这里的证书,并不是纸质证书,而是一串数据,证书由“权威机构”颁布,证书类似于一个对象,里面包含了各种数据
- 服务器的公钥
- 颁发证书的机构
- 有效时间
- ......
- 被加密的签名(校验和)
校验:
在证书中,存在一个被加密的签名,这个签名被权威机构的私钥加密,同时通过一个复杂的算法,将证书中的各个元素整合在一起算出一个值sum1
当客户端拿到证书后,使用同样的算法将证书中的各个元素再算一次,拿到一个值sum2
同时,使用证书的公钥对加密的签名进行解密拿到sum1(证书的公钥在操作系统中内置)
对比sum1和sum2,如果相同,则说明没被篡改。
一个服务器架设的时候,需要先去权威机构申请证书,同时把自己的公钥提交过去,这样在服务器通信时就变成了这样
在这个过程中,黑客是无法使用中间人攻击的。
黑客虽然也可以拿到权威机构的公钥、证书等信息,但黑客一旦将证书中的公钥篡改,客户端算出来的校验和必然和签名不同,而黑客是无法篡改签名的。因为签名被权威机构的私钥加密。也就是说,黑客想要篡改证书,只能拿到权威机构的私钥,但是要拿到权威机构的私钥,或许只能使用一些物理手段了