首先,我们在讲HTTPS之前先了解下为什么摒弃HTTP。
HTTP
明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改,严重情况下,会造成恶意的流量劫持等问题,甚至造成个人隐私泄露(比如银行卡卡号和密码泄露)等严重的安全问题。
HTTPS
超文本安全传输协议,和HTTP相比,多了一个SSL/TSL的认证过程,端口为443。
HTTP协议直接放置在TCP协议之上,而HTTPS在HTTP和TCP中间加上一层加密层。如图2-1所示。
图2-1
HTTPS流程解析
首先,我们来看一下HTTPS的简要流程图(如图3-1)。
图3-1
1.客户端先向服务端发送一次HTTPS的连接请求。HTTPS服务端返回CA证书和加密公钥public key(非对称加密,如RSA)。
2.客户端用预设的CA列表验证证书,若证书有问题则提示风险。
3.客户端生成随机对称密钥,并通过第一步骤中的public key做加密(如AES对称加密)
4.将加密后的对称密钥发送给HTTPS服务端
5.HTTPS服务端用自己的非对称密钥private key解密,得到第三步的随机对称密钥
6.之后双方传送数据都用第五步得到的对称密钥加密后通信
注意点:
- 第一步中为什么使用非对称加密(如RSA)?
因为非对称加密中,公钥加密的数据,有且只有唯一的私钥才能够解密。栗子:我有N把锁但只对应一把钥匙,这把钥匙保存在HTTPS服务器中,锁通过第一步的请求分发给各个客户端。
- 第三步中为什么使用对称加密(如AES)?
因为非对称加密的解密过程极其消耗CPU资源,如果在通信过程中均使用非对称加密,会对服务器产生巨大的压力。因此非对称加密只是在对称密钥交换或者CA签名的时候使用(第一步和第五步)。之后一直使用对称加密进行通信,因为对称加密的效率高、速度快。
栗子:对称加密就是一把锁对应一把钥匙,第四步就是客户端把自己的钥放进过public key这把锁里,然后发给HTTPS服务端,服务端用自己的private key打开这把锁,得到了里面的对称密钥。这样客户端和服务端双方手里都拿着对称密钥,之后就可以拿着这把锁互相加解密了。
- 为什么需要CA数字证书?
数字证书有三个功能:
1.身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站;
2.分发公钥。每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥)。在SSL握手时会通过certificate消息传输给客户端;
3.验证证书合法性。客户端接收到数字证书后,会对证书合法性进行验证。只有验证通过后的证书,才能够进行后续通信过程(通过数字签名防伪SHA-RSA)。
如果没有数字证书,第一步中的非对称密钥可能会被中间人拦截,然后自己创建一个新的非对称密钥给客户端,从而导致客户端和服务端的通信均可被中间人解密了
综上所述,如图3-2,非对称加密算法(公钥和私钥)交换对称密钥+数字证书验证身份(验证公钥是否是伪造的)+利用对称密钥加解密后续传输的数据=安全
图3-2
HTTPS基本的流程如上所示,其中的非对称加密、对称加密和数字签名可以展开很多篇幅,这里就不详细展开了。可以通过对应用密码学的学习,对HTTPS的加解密过程进行更深入的理解。