TLS⼀SSL协议格式(一)

2025-01-05 15:42:39
推荐回答(1个)
回答1:

TLS/SSL协议实际上是分层的,类似IP/TCP协议;

上图为一个 TLS Record Layer 包,可用看到其结构为:

Record类型:

TCP包中除了 TLS Record Layer 外,可以看到前面还有部分内容,这是因为按照网络协议七层规范,层次关系为数据链路层-》网络层-》传输层-》TLS/SSL;
其中数据链路层的结构为目的地址+源地址+类型,对应到图上:

TLS Record Protocol 的ContentType=22时,Body的内容采用 Handshake Protocol ;

Hello request 消息由服务端发送给客户端,通过客户端重新开始SSL握手;

消息体为空;

客户端发送 Client hello 消息开始SSL握手;

Server hello 消息由服务端发送给客户端,作为 Client hello 的响应;如果服务端无法找到匹配的SSL/TLS版本或CipherSuits,会返回 handshake failure alert ;

服务端发送证书到客户端,客户端据此验证服务端身份;一般而言,该消息紧跟着 Server hello 消息;

证书链所占用的字节,用3bytes表示;

该消息一般紧接着 Server certificate 消息;该消息并不是必须的,取决于协商出的key交换算法;如果 Server certificate 并不包含计算premaster的所有参数,则必须发送该消息;
采用如下算法需要发送 Server certificate 消息:

采用如下算法不需要发送 Server certificate 消息:

由于目前使用较多的是ECDHE,本文只介绍该格式:

1byte,目前为常量0x03;

该消息是可选的,如果服务端需要验证客户端身份,可以通过该消息要求客户端提供证书;

哈希和签名算法列表,从TLS1.2开始,之前版本不存在该字段;用2bytes存储算法列表占用的字节数;
每个Algorithm由hash(1byte)+signature(1byte)组成;

Server certificate 相同

该消息由客户端发送到服务端,校验证书