上一篇日志总结了TLS协议中,在握手层之下接近TCP传输层的记录层协议,其主要工作是将上层握手层的消息进行分块,封装,添加消息头处理。那么,握手层发来的消息里面都有些什么呢?我们都知道客户端和服务器端握手时会进行密钥协商,协商得出一个密码套件(或者叫预备主密钥),密码套件指定了客户端和服务器端连接使用的密钥协商算法,加密算法等,密码套件通过密码衍生算法转换为主密钥(或者说会话密钥),主密钥再用同样的密码衍生算法转换为各个密钥块,每一块密钥亏对应的是参数,如初始化向量IV,AES对称加密密钥等。由此可见TLS协议握手层是多么的重要。
四个子协议
握手层协议由四个子协议组成:握手协议、警告协议,应用层协议和密码切换协议。其中密码切换协议在上一篇里简单提到过,客户端和服务器端在一开始建立连接时,各自都处于可读状态和可写状态,当双方的密钥块准备好后,就可以向对方发送密码切换协议消息,提示对方切换连接状态为可读和可写状态,最后进行数据的加密操作。
握手协议消息头
从握手层消息头格式可以看到,由一个字节长度的子消息类型,加上三个字节长度的消息长度标识,可变长度的消息内容组成,和记录层的消息类型一样,不同的类型有不同的十六进制编号,上图的记录层消息头中,消息类型是0x16,标识的是握手协议。
密码切换
TLS记录层协议在处理握手,警告和密码切换子协议时,都没有进行加密保护,因为此时客户端和服务器端还没有完成密钥协商,协商出一个双方都支持的密码套件,因此,TLS记录层协议在处理这三个子协议时都是明文传输的,为其添加上消息头,封装。当客户端和服务器端协商出密码套件后,由密码切换子协议用来