握手阶段如下图所示,可分为5步(使用Diffie – Hellman算法):
第一步,浏览器给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
第二步,服务器确认双方使用的加密方法,使用的tls版本号和一个随机数。
第三部,并给出数字证书、以及一个服务器运行Diffie-Hellman算法生成的参数,比如pubkey。
第四部,浏览器获取服务器发来的pubkey,计算出另一个pubkey,发给服务器。
第五部,服务器发给浏览器一个session ticket。
下面,我们使用wireshark抓包验证上面的握手过程。
在浏览器中访问https://baidu.com, 使用ip.addr==119.75.217.109 && ssl来过滤TLS包。结果如下图所示。
图一
我的Chrome浏览器一开始就连续给服务器发送三个相同的“Client Hello”包,这三个包除了源端口和随机数不一样外,其他的部分都相同。(图三四五所示)为什么?后面我们会看到,最总这个connection只用了第一个“Client Hello”所建立的连接,也就是端口号为4188。所以,之所以