SSL连接的抓包分析

在上一篇博客中,我用JAVA编写了一个服务器和客户端程序,实现SSL的双向认证和连接。下面我们可以对整个连接的过程进行抓包分析,更好的理解整个连接的过程,也方便做故障排查。

首先安装wireshark,这是一个很方便的抓包分析工具。启动wireshark, 选择要抓包的网络接口。因为我是在本地运行服务器和客户端程序,因此这里选择loopback接口。之后,我们需要配置一下SSL的端口,因为服务器是设置了9999这个端口来进行连接,这不是默认的SSL端口(443),因此需要在wireshark中配置一下,不然抓到的包里面是没有SSL协议的。

打开wireshark->edit->prefrence->protocols->HTTP,在SSL/TLS ports里面填入443,9999。这样就能抓到SSL协议的包了

在SSL连接建立之后,服务器和客户端的通讯的内容是被加密的,如果我们想要看到这些内容,就需要解密。这里我们需要借助一个第三方的工具,来记录SSL连接建立时协商的随机数和Secret key。我选择的是jSSLKeyLog,下载了这个jar包之后,启动客户端时输入如下命令,就可以把相关的连接信息记录到ssl_logfile.log文件。

java -javaagent:jSSLKeyLog.jar=ssl_logfile.log -jar client-1.0-SNAPSHOT.jar

在wireshark的edit->prefrence->protocols->tls中,(Pre)-Master-Secret log filename输入ssl_logfile.log文件的路径,wireshark就能帮我们解密SSL传输的application data的信息。

以下是我在wireshark中抓取的SSL双向认证连接的数据包:

No.	Time	Source	Destination	Protocol	Length	Info
1	0.000000	127.0.0.1	127.0.0.1	TCP	56	64095 → 9999 [SYN] Seq=0 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM=1
2	0.000310	127.0.0.1	127.0.0.1	TCP	56	9999 → 64095 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM=1
3	0.000348	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=1 Ack=1 Win=2619648 Len=0
4	0.054500	127.0.0.1	127.0.0.1	TLSv1.2	327	Client Hello
5	0.054556	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1 Ack=284 Win=2619648 Len=0
14	0.117108	127.0.0.1	127.0.0.1	TLSv1.2	134	Server Hello
15	0.117153	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=284 Ack=91 Win=2619648 Len=0
16	0.117501	127.0.0.1	127.0.0.1	TLSv1.2	883	Certificate
17	0.117527	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=284 Ack=930 Win=2618624 Len=0
18	0.154454	127.0.0.1	127.0.0.1	TLSv1.2	349	Server Key Exchange
19	0.154510	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=284 Ack=1235 Win=2618368 Len=0
20	0.155595	127.0.0.1	127.0.0.1	TLSv1.2	281	Certificate Request
21	0.155621	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=284 Ack=1472 Win=2618112 Len=0
22	0.155776	127.0.0.1	127.0.0.1	TLSv1.2	53	Server Hello Done
23	0.155797	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=284 Ack=1481 Win=2618112 Len=0
24	0.181028	127.0.0.1	127.0.0.1	TLSv1.2	890	Certificate
25	0.181103	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1481 Ack=1130 Win=2618880 Len=0
26	0.231214	127.0.0.1	127.0.0.1	TLSv1.2	86	Client Key Exchange
27	0.231256	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1481 Ack=1172 Win=2618880 Len=0
28	0.274682	127.0.0.1	127.0.0.1	TLSv1.2	313	Certificate Verify
29	0.274724	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1481 Ack=1441 Win=2618624 Len=0
30	0.277254	127.0.0.1	127.0.0.1	TLSv1.2	50	Change Cipher Spec
31	0.277294	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1481 Ack=1447 Win=2618624 Len=0
32	0.278436	127.0.0.1	127.0.0.1	TLSv1.2	89	Finished
33	0.278475	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1481 Ack=1492 Win=2618368 Len=0
34	0.283691	127.0.0.1	127.0.0.1	TLSv1.2	50	Change Cipher Spec
35	0.283761	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=1492 Ack=1487 Win=2618112 Len=0
36	0.284271	127.0.0.1	127.0.0.1	TLSv1.2	89	Finished
37	0.284303	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=1492 Ack=1532 Win=2618112 Len=0
38	0.286136	127.0.0.1	127.0.0.1	TLSv1.2	84	[TLS segment of a reassembled PDU]
39	0.286178	127.0.0.1	127.0.0.1	TCP	44	9999 → 64095 [ACK] Seq=1532 Ack=1532 Win=2618368 Len=0
40	0.288601	127.0.0.1	127.0.0.1	TLSv1.2	77	[TLS segment of a reassembled PDU]
41	0.288642	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [ACK] Seq=1532 Ack=1565 Win=2618112 Len=0
42	1.312272	127.0.0.1	127.0.0.1	TCP	44	64095 → 9999 [RST, ACK] Seq=1532 Ack=1565 Win=0 Len=0

从以上的数据可以清晰的了解整个SSL连接的全过程。当我们想了解服务器和客户端之间传输了什么数据的时候,例如这里的第38行是连接建立之后,客户端给服务器发送一个"Helo World"的信息,第40行是服务器给客户端发送一个"Bye"的信息。当我们点击这两行的时候,wireshark会自动帮我们解密。这样很方便我们进行后续的一些故障排查的工作。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HTTPS (Hypertext Transfer Protocol Secure) 是HTTP协议的一个安全版本,通过SSL/TLS协议加密数据,提供数据传输的安全性和隐私保护。当你使用Wireshark抓包分析HTTPS流量时,你会看到实际的网络通信被包装在一个加密套接字中,这使得直接查看数据内容变得困难。 抓包分析HTTPS的主要步骤如下: 1. **启动Wireshark**:首先,打开Wireshark,并确保已经安装了SSL/TLS解密插件(如SSL dissector),以便正确解析加密流量。 2. **选择接口和过滤器**:选择你的网络接口,通常选择“Any”来捕获所有流量,然后添加过滤器`tcp.port == 443`,这样只会显示HTTPS流量。 3. **截取流量**:开始抓包,等待一段连接时间,确保捕获到完整的HTTPS会话,包括三次握手(TCP连接建立)和后续的数据交换。 4. **解密流量**:Wireshark会自动对SSL/TLS包进行解密,但解密过程可能会因为证书问题、私钥缺失等原因失败,这时可能需要手动导入相应的证书或信任链。 5. **查看会话信息**:在捕获的包中,你可以看到TLS/SSL连接的详细信息,如版本、加密算法、认证方法等。HTTP请求和响应会被转换为明文显示。 6. **分析数据**:通过查看HTTP请求头和响应头,可以了解请求的URL、方法、HTTP状态码以及任何附加的身份验证信息。 相关问题: 1. 如何在Wireshark中导入自定义的SSL证书来解密HTTPS会话? 2. HTTPS握手过程中,三次握手具体指什么? 3. Wireshark如何处理SSL/TLS连接失败的情况?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gzroy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值