内容简介:如果是nginx做的反向代理,一般证书会配置在nginx这一层。Preferences -> Protocols -> TLS
解密TLS报文
1. 预备知识
- 拥有服务器端证书对应的私钥
- 加密算法不能使DHE、ECDHE
- 报文必须完整,从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
添加私钥参数
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
2. client和server相同时间段内抓包
3. 对比client和server的报文
- 在一端定位到异常报文,获取tcp对应seq
- 在另一端查询是否有相同seq的数据且时间相同
4. Go on
剩下的就是根据报文内容具体分析了:比如会不会是连接超时,http2 server主动发送了goaway,然后断开了连接。
–
Q&A
Q1:如何判断当前TLS使用的加密算法
A:在TLS的Server Hello报文中查Cipher Suite,如下图
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:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux程序设计
Neil Matthew、Richard Stones / 陈健、宋健建 / 人民邮电出版社 / 201005 / 99.00元
时至今日,Linux系统已经从一个个人作品发展为可以用于各种关键任务的成熟、高效和稳定的操作系统,因为具备跨平台、开源、支持众多应用软件和网络协议等优点,它得到了各大主流软硬件厂商的支持,也成为广大程序设计人员理想的开发平台。 本书是Linux程序设计领域的经典名著,以简单易懂、内容全面和示例丰富而受到广泛好评。中文版前两版出版后,在国内的Linux爱好者和程序员中也引起了强烈反响,这一热潮......一起来看看 《Linux程序设计》 这本书的介绍吧!