深入理解HTTPS系列-终极篇-Wireshark带你看世界

943 阅读4分钟

前情提要

深入理解HTTPS系列-密码学篇-随机数(一)

深入理解HTTPS系列-密码学篇-哈希算法(二)

深入理解HTTPS系列-密码学篇-对称加密(三)

深入理解HTTPS系列-密码学篇-消息验证码(四)

深入理解HTTPS系列-密码学篇-公开密钥(五)

深入理解HTTPS系列-密码学篇-证书(六)

这一篇是深入理解HTTPS系列的终结篇了,下面会详细剖析HTTPS通信的全过程

以www.baidu.com网站为例,利用tcpdump和wireshark抓包来看一次HTTPS握手的全过程,以下是wireshark的抓包记录:

大致可以分为四个部分:

  • 经典TCP三次握手:想必都很熟悉的老朋友SYNC、ACK
  • TLS握手:下面会重点展开介绍。可以看到TLS握手中还是有很多的TCP ACK信息,TLSv1.2表示的是会话使用的TLS 1.2版本,这些信息本身底层都是TCP包
  • TLS加密通信:图中显示的是明文 主要是在抓包过程中记录了会话主密钥 所以显示的是解密后的结果
  • TCP/TLS挥手:和TCP经典四次挥手差不多

TLS握手

在上图中的TLS握手过程中,主要有以下几个INFO信息,这些其实也就是TLS协议中的内容。理解了这些协议过程,实际也就掌握了HTTPS通信握手过程

  • Client Hello:客户端向服务端传递TLS协议版本、支持的密码套件列表以及随机数

其中,密码套件具体如下:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)为例,介绍下密码套件含义:

    • ECDHE:密钥协商算法,不清楚的同学可以查看系列之前的文章
    • RSA:身份验证算法,一般验证服务端证书时采用的算法,即服务端证书的签名算法
    • AES_128_GCM:密钥长度为128比特且迭代模式为GCM的对称加密算法
    • SHA256:HMAC算法
  • Server Hello:服务端协商密码套件

可以看到服务端协商出来的密码套件是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)

  • Certificate:服务端传输自身的证书链给客户端,客户端需要进行验证

这里百度服务端传的是一条完整的证书链

  • Server Key Exchange:该消息的作用主要是服务端向客户端传递动态参数,比如动态DH参数、ECC椭圆曲线参数等

本例中如上面的椭圆曲线选择。因为是明文传输的,为了防止消息被篡改,会包含一个签名信息

  • Server Hello Done:这是一条空消息,目前是告知客户端“我已经发送了足够的消息了“,接下来你可以验证证书以及协商预备主密钥了

  • Client Key Exchange:在接收到服务器的Server Hello Done消息后,客户端应该立刻发送该消息,该消息的主要作用就是协商出预备主密钥。

这里可以看到客户端发送的就是客户端生成的DH密钥对中,服务端这里就可以根据公钥计算出预备主密钥。

  • Change Cipher Spec:通知对方后续的消息都需要进行TLS加密

  • Finished:在握手协议中,所有的子消息没有加密和完整性保护,消息很容易被篡改,为了避免消息篡改,客户端和服务器端需要校验对方发送的Finished子消息,确保所有的握手消息没有被篡改

随后服务端也会依次发送Change Cipher Spec和Finished消息。一旦验证通过,握手环节就结束了,双方都可以根据握手过程中的信息计算中预备主密钥,从而计算出会话密钥了。

这里我们再将整个过程梳理一下:

抓包过程

感兴趣的同学可以自行利用tcpdump和Wireshark进行抓包分析,这里介绍下作者的抓包过程:

  • 环境准备:在MAC电脑上安装tcpdump和wireshark
  • 抓包准备:注意不要有其他的软件同时访问这个网址 否则数据量比较大 不好分析
sudo tcpdump -i any 'host www.baidu.com' -w 'baidu.https.pcap'
  • 执行请求
# SSLKEYLOGFILE是期望保存密钥的文件路径 在Wireshark解密时需要
SSLKEYLOGFILE=./log curl 'https://www.baidu.com' -I
  • 导入wiresahrk展示

点击File -> Open,打开刚刚的baidu.https.pcap抓包文件即可看到抓包数据了,如果想要解密数据,可以在Preference -> TLS中导入SSLKEYLOGFILE文件

总结

以上就是关于HTTPS的全部内容,这一篇也是系列的终篇,希望对大家有所帮助,同时也期待下一个全新系列的开启~