SSL/TLS协议一般有两种握手过程,一种是SSL握手,一种是会话恢复。前些时候在写HTTP和HTTPS协议区别的时候介绍了SSL协议的相关理论知识,但多少还是有点抽象,今天我们可以通过wireshark抓包来分析下SSL握手的过程。

一、正常的握手过程

(一)过程如下

(二)wireshark抓到的对应的包如下

(三)具体的包分析

  • Client Hello

包中包含了Version(版本信息)、session ID Length(是否有保存会话),Cipher Suites(加密套件)

  • Server Hello

包中包含了TLS的version(版本)、Cipher suite(服务器选择的加密组件)

  • Server发送Certificate

  • Server发送Server Key Exchange

这里用的是DH协议来交换对称加密的密钥。

  • Server 发送Server Hello Done

只是简单地告知客户端,服务器的Hello信息已经发完了

  • Client发送Client Key Exchange

这里也是用DH协议来交换对称加密的密钥

  • Client发送Change Cipher Spec

用来告知服务器,我接下来发的消息要用咱之前协商好的加密套件进行加密了。

  • Client发送Encrypted HandShake Message

包中包含一段加密信息,也就是流程图中的finished消息。

  • Server发送New Session Ticket

分配给客户端一个新的Session Ticket,和Session ID 类似。客户端接收到后保存到本地,今后再和服务器通信时,只要发送这个Session Ticket就行了。

  • Server发送Change Cipher Spec

用来告知客户端,我接下来发送的消息要用咱之前协商好的加密组件进行加密,你需要对其进行解密。

  • Server发送Encrypted HandShake Message

包中带有一段加密的信息,即握手过程图中的finished消息。

  • Client和Server进行正常通信

Client解密出信息后便知道已经和服务器建立好连接了,之后便开始发送Application Data。Server返回给它对应的加密信息。

二、会话恢复过程

会话恢复是指只要客户端和服务器已经通信过一次,它们就可以通过会话恢复的方式来跳过整个握手阶段二直接进行数据传输。

(一)恢复过程

(二)wireshark抓到的对应的包

(三)

  • 客户端发送Client Hello包

包中携带了上一次建立的session ID,并且session_ticket扩展字段为0。说明我们这里使用的是session ID机制。

  • 服务器返回Server Hello信息

包中包含了当前服务器所使用的TLS版本,以及它支持的最高版本。

  • 服务器发送Change Cipher Spec信息

告知客户端,我接下来发送的消息要用咱之前协商好的密钥和加密组件进行加密了。用于验证之保存的session会话是有效的。

  • 服务器发送finished信息

  • Client发送change_cipher_spec信息

告知服务器我将用咱之前协商好的密钥套件和密钥加密信息。

  • Client发送finished信息

会话恢复完成,建立SSL连接

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐