今天给大家分享一下https的通信交互机制,如果不了解https的请查看,话不多说看下图就一目了然
步骤1 :客户端通过发送ClientHello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度)。
步骤2:服务器进行SSL通信时,会以ServerHello 报文作为应答。和客户端一样,在报文中含有SSL的版本以及加密组件
步骤3: 之后服务器会发送 数字证书机构签名的数字证书(Cretificate,服务器公开钥匙+证书)。报文中包含公开密钥证书。
步骤4: 最后服务器发送Server Hello Done 报文通知客户端,最初阶段的SSL握手协议结束。
步骤5: SSL第一次握手结束之后,客户端以 Client key Exchange 报文作为回应。报文中包含通信加密中使用的一种称为Pre-master secret的随机密码串。该报文已被步骤3中的公开密钥进行加密。
步骤6:接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,次报文之后的通信会采用Per-master secret(共享)密钥加密
步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否成功,要以服务器是否能够正确解密(共享密钥解密)该报文作为判断标准。
步骤8:服务器同样发送 Change Cipher Spec报文,该报文提示客户端,次报文之后的通信会采用Per-master secret(共享)密钥加密
步骤9:服务器同样发送Finished报文,该报文包含连接至今全部报文的整体校验。这次握手协商是否成功,要以客户端是否能够正确解密(共享密钥解密)改报文作为判断标准。
步骤10: 服务器和客户端的Finished报文交换之后,ssl连接算是建立完成。当然,通信会受到SSL的保护。从此开始进行应用层协议的通信,即发送http请求
步骤11:应用层协议通信,即发送http响应。
步骤12:最后由客户端断开连接。断开时,发送close_notify报文。上图做了一些省略,这部之后在发送TCP FIN 报文来关闭与TCP的通信
在以上流程中,应用层发送数据时会附加一种叫做MAC(masess authentication code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
下面是对整个流程的图解。途中说明了从使用服务器的公开密钥证书建立https通信的整个过程。