准备工作
1.获取本机器的IP。
[root@localhost ~]# ip addr | grep global | awk '{print $2}'
192.168.113.128/24
2.使用nslookup获取目标域名的IP信息。
[root@localhost ~]# nslookup www.baidu.com
Server: 192.168.113.2
Address: 192.168.113.2#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 180.101.49.11
Name: www.a.shifen.com
Address: 180.101.49.12
3.使用curl请求同时配合Wireshark进行抓包。
[root@localhost ~]# curl https://www.baidu.com
<!DOCTYPE html>......
抓包分析
这是一个基于Diffie-Hellman的握手过程。
-
1.客户端192.168.113.128向服务端180.101.49.11发送Client Hello报文。报文中包含明文传输的客户端所支持的TLS协议版本号Version,生成的随机数Random,加密套件候选列表Cipher Suites,压缩方法Compression Methods等。
-
2.服务端向客户端发送Server Hello报文,报文中包含服务端选用的TLS版本号Version,服务端生成的随机数Random,服务端确认使用的加密套件Cipher Suite等。
-
3.服务端向客户端发送Certificate报文,报文包含服务端的证书链和公钥信息。
-
4.服务端向客户端发送Server Key Exchange,Server Hello Done报文。报文中主要包含客户端随机数,服务端随机数,服务端随机数三个随机数通过私钥签名,同时告诉客户端Server Hello阶段结束。
-
5.客户端向服务端发送Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message报文。客户端检查证书链信息无误之后,利用公钥验证服务端的签名,客户端利用服务端发来的DH参数生成预主密钥,再通过预主密钥和客户端随机数,服务端随机数生成主密钥。客户端发送客户端的DH参数。
-
6.服务端向客户端发送Change Cipher Spec报文。服务端根据客户端的DH参数,生成预主密钥,通过预主密钥和随机数生成主密钥,表示随后信息都将使用双方协商好的加密算法和密钥传输。
-
7.服务端向客户端发送Encrypted Handshake Message报文。