Wireshark解密TLS报文

栏目: 编程工具 · 发布时间: 4年前

内容简介:如果是nginx做的反向代理,一般证书会配置在nginx这一层。Preferences -> Protocols -> TLS

解密TLS报文

1. 预备知识

  1. 拥有服务器端证书对应的私钥
  2. 加密算法不能使DHE、ECDHE
  3. 报文必须完整,从TCP握手开始

2. 操作步骤

2.1 抓取报文

2.1.1 Linux 服务器上抓取tcp报文

tcpdump -i eth0  port 10176 -w server.cap -C 50
# -i 指定网卡名
# -w 输出到文件 
# -C 文件分割大小,单位M
# port 指定监听端口

2.1.2 Android上抓取tcp报文(如果无特殊需要抓一方的报文就够了)

tcpdump -i any -p port 8883 -vv -s 0 -w sdcard/client.pcap
# -i   指定网卡名
# -w   输出到文件 
# -C   文件分割大小,单位M
# port 指定监听端口
# -vv  输出详细报文
# -s 0 不截取数据包

2.2 设置Wireshark(v3.0.1)

2.2.1 添加证书私钥

如果是nginx做的反向代理,一般证书会配置在nginx这一层。

Preferences -> Protocols -> TLS

Wireshark解密TLS报文

添加私钥参数

IP Address   服务器IP

Port               服务器端口

Protocol        http(如果是http:小写,非https)

Key File        选择key文件,格式pem

注意:私钥格式为pem,样式如下:

—–BEGIN RSA PRIVATE KEY—–

—–END RSA PRIVATE KEY—–

2.2.2 使用Wireshark打开.pcap文件

如果tcp报文完整(从tcp握手开始),并且私钥正确,而且加密算法不是DHE/ECDHE,你应该已经看到解密后的内容了。

排查网络丢包、异常数据

有时遇到网络丢包的情况,也可能遇到client收到server异常数据的情况,两者的处理方式是一样的

1. 禁止Wireshark重排TCP seq和ack

Preferences -> Protocols -> TLS

Wireshark解密TLS报文

2. client和server相同时间段内抓包

3. 对比client和server的报文

  1. 在一端定位到异常报文,获取tcp对应seq
  2. 在另一端查询是否有相同seq的数据且时间相同

4. Go on

剩下的就是根据报文内容具体分析了:比如会不会是连接超时,http2 server主动发送了goaway,然后断开了连接。

Q&A

Q1:如何判断当前TLS使用的加密算法

A:在TLS的Server Hello报文中查Cipher Suite,如下图

Wireshark解密TLS报文

Q2:如何指定TLS使用的加密算法

A1:客户端指定,客户端可以通过参数的方式设定,以okhttpclient为例

OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder();
ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                .tlsVersions(TlsVersion.TLS_1_2)
                .cipherSuites(
                        CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
                        CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA,
                        CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA,
                        CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA)
                .build();
        okHttpClientBuilder.connectionSpecs(Collections.singletonList(spec));

OkHttpClient okHttpClient = okHttpClientBuilder.build();

A2:服务端通过配置的方式设定,以nginx为例

ssl_prefer_server_ciphers on;
ssl_ciphers AES128-GCM-SHA256;

Q3:nginx http2_module连接空闲超时时间是多少?

A:3min

Q4:如何判断wireshark解密成功了?

A:观察是否http请求的url已经变成明文;http payload也是明文了(界面下方可以切换tab)

Q5:DHE算法为什么不能解密?

A:DHE算法符合完全正向保密协议,中间人即使得到私钥也破解不了密文。

Links:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python Algorithms

Python Algorithms

Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99

Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试