Step1:客户端向服务端发送“ client hello ”消息,并按客户端设置的优先级列出客户端支持的所有加密套件,并发送一个随机数(用于后续生成会话密钥)
Step2:服务端向客户端发送“ server hello ”消息,并根据自己的优先级从客户端提供的加密套件中选取最佳匹配项,并向客户端发送会话 ID、服务端证书和又一个随机数。如果需要双向认证的话,服务端还会像客户端发送一个请求客户端证书的申请
Step3:客户端验证服务端证书
Step4:客户端从服务端证书中提取服务端的公钥,并用公钥加密一个随机数发送给服务端
Step5:如果是双向认证,客户端需要再发送用客户端私钥加密的一个随机数,以及客户端证书
Step6:如果需要双向认证,服务端验证客户端的证书
Step7:根据先前生成的多个共享的随机数,客户端和服务端各自生成会话密钥(正常情况下是一样的),然后通过密钥交换算法交换会话密钥,客户端先向服务端发送一个使用会话密钥加密的“ finished ”消息,此时客户端部分的 SSL/TLS 握手已经完成
Step8:服务端向客户端发送一个使用会话密钥加密的“finished”消息,此时服务端部分的 SSL/TLS 握手也完成了
Step9:开始 SSL/TLS 会话,通信中的所有数据都是使用批量加密算法和会话密钥加密的
完整性检验算法的运用:
在 SSL/TLS 会话中的数据会被分为一个个分片,每个分片经过压缩后会通过 MAC 算法计算一个哈希值并附加在尾部,用于接收方确定数据的完整性