TLS1.2 handshake中extension的解析
前段时间抓包分析TLS1.2协议,发现TLS1.2中在client hello中会有很多extension,如下图所示,图中红色框图中部分为extension。
由于本人主要对算法感兴趣,因此主要是对Extension 中的signature_algorithms进行解析,该字段的展开如下图所示:
服务器在收到client hello后,对其中的extension 进行解析,然后选定一个(选择原则应该是主要考虑安全性,这个只是猜测,具体原则未知),在后面签名的时候会使用选择的算法进行使用。
这里需要注意的是,从抓包来看,sever hello中extension部分并不包含对signature algorithm的回复,如下图所示:
server hello中为什么回复了这三个参数,目前还没有深入研究,但是在接着的server key exchange包中使用了签名算法,并且对算法进行了说明,如下图所示:
上图中红色框图部分,即为签名算法和签名结果。server选择了安全性较高的sha512,可以推断安全是选择算法的重要因素之一。
仔细想一下,确实不需要在hello中协定好签名算法,为了减少交互,服务端只需从客户端支持的算法中选择一个使用就好。而且这样也更灵活,即使由于其它原因需要更改签名算法,也不需要去通知客户端,只要是客户端支持的算法列表中的算法,客户端都可以解析,这种松耦合的设计,更利于协议的稳定性。
补充一下:
TLS1.2的RFC中写道,如果client 没有发送extension的话,服务端应该如何来选择签名算法,主要是依据协商的算法套件,采用密钥交换的公钥算法作为签名算法,摘要算法用sha1,原文如下: