HTTPS和HTTP主要不同就是多一个TLS的一个流程,是一个在传输层的安全协议。
四次握手:
第一次握手:客户端向服务端发送加密通信请求(ClientHello)。在这一步主要发送以下信息:
- 客户端支持的TLS版本
- 客户端生成的第一个随机数(R1)
- 客户端支持的密码套件列表(如RSA加密算法)。
第二次握手:服务端收到客户端的请求后,向客户端发送响应(ServerHello)。主要发送以下信息:
- 确定TLS版本
- 服务器生成的第二个随机数(R2)
- 确定的密码套件列表
- 服务器的证书和公钥
第三次握手:客户端收到服务器的响应之后,首先确认证书的真实性。没问题之后,从证书中取出公钥,这个时候双方就有一对非对称密钥。向服务端发送以下信息:
- 第三个随机数(R3)又叫做预主密钥
- 加密通信算法改变通知,表示后续需要通过“会话密钥”进行加密通信(会话密钥=R1+R2+R3)
- 客户端握手结束通知,表示客户端的握手阶段已经结束。
第四次握手:服务端收到客户端的第三个随机数(R3)之后,通过协商的加密算法(RSA进行加密)计算出本次通信的“会话密钥”,这个时候客户端和服务端就有了一对相同的加密对称密钥。然后向客户端发送以下信息:
- 加密通信算法改变通知,表示后续需要通过“会话密钥”进行加密通信(会话密钥=R1+R2+R3)
- 服务端握手结束通知,表示服务端的握手阶段已经结束。