2022-08-01 06:40:24
HTTPS过程详解及tcpdump抓包分析如下:
一、HTTPS过程详解
HTTPS(Hypertext Transfer Protocol Secure)是HTTP的安全版本,通过SSL/TLS协议提供加密通信。其交互过程主要包括以下几个步骤:
TCP三次握手
客户端发送SYN包到服务器,请求建立连接。
服务器响应SYN-ACK包,确认连接请求。
客户端发送ACK包,完成TCP连接建立。
SSL/TLS握手
Client Hello:客户端发送支持的TLS最高版本号、生成的随机数、支持的加密套件及主机名等信息。
Server Hello:服务器选择TLS版本、生成随机数,并确定加密套件后返回给客户端。
Certificate:服务器发送证书信息给客户端验证,包括证书有效期等。
Server Key Exchange(可选):发送密钥交换所需的服务器方信息,如公钥。
Server Hello Done:表示服务器方的信息发送完毕。
Client Key Exchange:客户端生成预主密钥,用服务器的公钥加密后发送给服务器。
Change Cipher Spec:客户端通知服务器后续通信将使用协商的密钥和算法。
Finished:客户端发送加密的握手完成消息。
Change Cipher Spec:服务器通知客户端后续通信将使用协商的密钥和算法。
Finished:服务器发送加密的握手完成消息。
加密数据传输
握手完成后,客户端和服务器使用协商的密钥和算法进行加密通信。
二、tcpdump抓包分析
使用tcpdump工具可以捕获HTTPS通信过程中的网络数据包,以下是对关键步骤的抓包分析:
TCP三次握手
捕获SYN、SYN-ACK、ACK包,确认TCP连接建立。
SSL/TLS握手
Client Hello:捕获客户端发送的TLS版本、随机数、加密套件等信息。
Server Hello:捕获服务器选择的TLS版本、随机数及加密套件。
Certificate:捕获服务器发送的证书信息。
Server Key Exchange(如适用):捕获服务器发送的密钥交换信息。
Client Key Exchange:捕获客户端发送的加密预主密钥。
Change Cipher Spec和Finished:捕获双方通知使用新密钥的消息及握手完成消息。
加密数据传输
捕获加密后的应用数据传输包,由于数据已加密,无法直接查看内容。
三、服务端支持的TLS版本提高至1.3的抓包实践
当服务端支持的TLS版本提高至1.3时,若客户端不支持TLS 1.3,可能会导致连接失败。通过修改nginx配置(如将ssl_protocols TLSv1.2;改为ssl_protocols TLSv1.3;)并重启nginx服务后,使用不支持TLS 1.3的客户端尝试连接时,可能会捕获到RST包,表示连接被重置。这表明双方无法就TLS版本达成一致,导致连接建立失败。
总结
HTTPS通过SSL/TLS协议提供加密通信,其过程包括TCP连接建立、SSL/TLS握手及加密数据传输。使用tcpdump可以捕获并分析这些过程中的网络数据包,有助于理解HTTPS的工作原理及排查问题。当服务端支持的TLS版本提高时,需确保客户端也支持相应版本以避免连接失败。