HTTPS即为HTTP+SSL/TLS
首先了解几个概念
1.对称加密
对话双方使用相同的密钥对数据进行加密,解密
缺点:容易被第三方拦截从而造成数据的泄漏,篡改。
2.非对称加密
服务端提供一对密钥:公钥和私钥。公钥加密的数据只能被私钥解密,私钥加密的数据只能被公钥解密。服务端自己保留私钥,而将公钥传给客户端。客户端拿公钥加密数据后传给服务端。这样第三方由于没有私钥无法解密,而服务端可以拿私钥进行解密。
缺点:客户端无法直到这个公钥是否是真正的服务端的公钥。第三方可以拦截这个公钥,将其篡改为自己的公钥。当客户端拿到公钥,客户端以为是服务端的,其实是第三方的。客户端拿着第三方的公钥对数据加密后,第三方再拦截数据,使用自己的私钥解密,篡改,再用服务端的原本提供的公钥加密后传递给服务端。
3.数字签名
解决上述问题的方式就是,提供一个签名,表明这个数据确实是我发送的,而不是第三方伪造的。一种办法是,使用自己的私钥对数据进行加密。接收者拿公钥对数据解密。这样解密出来的数据只可能是由私钥持有者发送的,因为私钥加密只能由公钥解密,而只有私钥持有者可以对数据进行这种加密。CA就是使用这种方式提供权威认证的。CA会向服务端颁发证书,证书内容是服务端的公钥和服务端的唯一标识地址,并将证书内容使用CA的私钥进行加密。当客户端拿到这一证书时,使用CA的公钥解密,就可以得知,这的确是由服务端传来的数据,且服务端的公钥为xxx.
第三方无法伪造证书,因为CA机构是绝对权威的,且CA的密钥只有CA自己知道。
SSL/TLS握手过程
客户端先向服务端发送clinet_hello,并给出客户端支持的TLS版本和 加密套件集合以及随机生成的第一随机数。服务端接收到之后向客户端发送server_hello,并指定服务端和客户端共同支持的TLS版本和加密套件以及随机生成的第二随机数。随后,服务端向客户端发送CA机构颁发的权威证书,证实服务端的安全性。这之后,服务端发送server_hello_done,而客户端此时拥有:一定正确的属于服务端的公钥,两个随机数。客户端首先生成第三随机数,将这三个随机数一起生成一个会话密钥。随后,拿公钥加密这个会话密钥,并传递给服务端。这个密文只有服务端可以解开,因为只有服务端有私钥。然后,服务端解开客户端传来的密文,得到会话密钥后,双方就可以拿这个会话密钥进行通信,这个会话密钥没有除了双方无人可知。
由此可是,Https是对称加密和非对称加密结合的产物