You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A conventional Diffie-Hellman computation is performed. The negotiated key (Z) is used as the pre_master_secret, and is converted into the master_secret
记录对TLS握手过程的一次分析
分析场景: 在git bash下使用curl请求www.baidu.com
$ curl https://www.baidu.com
使用wireshark抓包结果如下(图1)
这里Encrypted Handshake Message在RFC5246中并没有直接提及
通过对HTTPS数据进行解密(参考 Wireshark对HTTPS数据的解密 ),可以看到Encrypted Handshake Message实际上就是握手协议中的Finished
证明过程: 使用浏览器访问https://www.baidu.com, 抓包结果(解密前)如下
wireshark导入Pre-Master-Secret后,可以看到Wireshark将Encrypted Handshake Message识别为Finished
到这里可以将图1抓包结果对应的握手过程表示如下
RFC5246详细地描述了上述每条信息包含的数据及作用,在这里我重点梳理密钥协商的一个过程
密钥协商最终目的就是双方协商出一个主密钥(Master secret),该主密钥用来生成衍生出其他密钥,比如会话密钥(参考Differences between the terms “pre-master secret”, “master secret”, “private key”, and “shared secret”?)
RFC5246 section-8.1中描述了Master secret的计算方法
其中ClientHello.random在ClientHello消息中
ServerHello.random在ServerHello中
而pre_master_secret的计算在使用不同协商机制情况下有不同的表现
通过查看Server Hello消息
得知密钥交换使用了ECDHE协议,原理可以参考ECDH
通过RFC5246 section-8.1.2描述
可以了解到ECDHE协商得到的值就是premaster secret
因为ECDHE数学原理看不懂所以这里无法展开讨论,但通过阅读该协议的描述可以知道通信双方完成ECDHE交换需要完成以下两点
通过分析抓包得到的数据可知,Server通过ServerKeyExchange告知Client使用的椭圆曲线和自己使用的公钥
然后Client通过ClientKeyExchange告知Server自己使用的公钥
有了椭圆曲线和对方的公钥后,双方就可以计算出一个相同的值,并将该值作为预主密钥(premaster secret), 到这里密钥协商就算完成,双方的Master secret也都可以计算出来了
暂时分析到这,关于证书校验和其他密钥协商机制的细节有机会再研究下
参考
The text was updated successfully, but these errors were encountered: