本文尽量用最小的篇幅来介绍HTTPS的加密过程,如果还看不懂可以参考文末尾的文章。
加密算法
先简单介绍一下HTTPS中使用的是混合加密算法,即对称加密和非对称加密的混合使用:
1.对称加密:顾名思义就是加密和解密都是使用同一个密钥。
优点:算法公开、计算量小、加密速度快、加密效率高,适合加密比较大的数据。
缺点:双方信息传输时需要携带秘钥,秘钥一旦被获取会导致安全问题。
2.非对称加密:非对称加密就是加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。一般来说,服务端会同时拥有公钥和私钥,将公钥公开发送给客户端。传输的信息由公钥进行加密,再由服务器持有的私钥进行解密。
优点:算法公开,加密和解密使用不同的钥匙,私钥不需要通过网络进行传输,安全性很高。
缺点:计算量比较大,加密和解密速度相比对称加密慢很多。
HTTPS加密流程
HTTPS就是在HTTP的基础上增加了TLS/SSL协议保证安全性。安全性主要是由CA证书(权威认证)和混合加密算法(对称加密+非对称加密)组成的。详细过程可以看下面的图。
只要你看懂了上面的对称加密、非对称加密流程,HTTPS的流程其实也很简单。
- 第123步:客户端获取服务端的CA证书(包含非对称加密的公钥),并进行验证。CA证书是需要花钱申请的,相当于认证机构为你的网站进行背书,确保网站的安全性。申请成功后,会产生一对公钥私钥。
- 第456步:客户端生成随机Key(作为对称加密的秘钥),由前面获取的公钥进行加密,并发送给服务端。服务端用私钥对解密,得到随机Key。
- 第78步:之后的传输过程中,都使用对称加密进行传输。服务器使用密钥 (随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密数据。
简单的说,HTTPS的传输过程使用的是对称加密(随机Key),因为对称加密不够安全,所以使用非对称加密的公钥对随机Key进行加密,由服务端持有的私钥进行解密,这样就不会在传输过程中暴露对称加密的公钥(随机Key)了。
想要有更详细的了解可以看这篇文章:
https://segmentfault.com/a/1190000021494676