一、问题背景

现网应用需要分析经过公网F5进入的https流量,网上搜索出来的结果都是通过wireshark 设置SSLKEYLOGFILE ,并在SSL协议中设置Pre-Master-Securet log file,可以对抓到的SSL https包进行解密。不过这里跟公司里的情况又有点不一样,由于https解密需要用到私钥。一般情况的话我们解析回联网上的包是没有私钥的,不过我这里私钥可以从F5上导出。理论上来说,有私钥,通过tcpdump进行抓包后,通过这个私钥文件,应该很容易通过wireshark 配置好私钥就可以解析出需要的信息。不过发现真正测试的时候并不好用。

二、ssldump解密

网上查询发现在Linux平台下有个ssldump 工具可以进行ssl https协议的抓包和解析,由于f5本身是基于红帽系统的,也可以安装软件。通过ssh登录f5后台,发现系统自带有ssldump工具。通过man查看该工具的用法如下:

man-ssldump
man-ssldump

其还有一个 -r 参数,可以对已经抓过的包,进行解析。

中间这部分运行完后,会将https包的内容解析出来,在下面通过分隔线打印出来。这里只截取了部分内容:

ssl-post
ssl-post

三、其他

由于F5是比较核心和昂贵的设备,不想占其资源,涉及到ssl解包的操作想在一台linux上进行,尝试在LINUX上安装ssldump工具。不过安装和使用过程中发现一些问题。

1、ssldump在linux上的安装

使用epel 源可以直接安装,不过安装完后,运行的过程中会有如下报错:

1# ssldump -Ad -k CLIENT_SD_CA.key  -r https2.pcap
2Problem loading private key
3ERROR: Couldn't create network handler

网上有人给出的结果是和openssl 包的版本兼容不对 。

换用源码包安装,遇到第一个提示:

configure: error: Couldn’t find PCAP library: needed for ssldump

该提示缺少libpcap包,下载该包,编译安装即可解决。再次编译,又遇到如下错误:

 1In file included from ./base/network.h:96:0,
 2                 from ./base/network.c:51:
 3./base/tcpconn.h:53:6: error: unknown type name ‘tcp_seq’
 4      tcp_seq s_seq;
 5      ^
 6./base/tcpconn.h:59:6: error: unknown type name ‘tcp_seq’
 7      tcp_seq seq;
 8      ^
 9./base/tcpconn.h:60:6: error: unknown type name ‘tcp_seq’
10      tcp_seq ack;
11      ^
12make: *** [network.o] Error 1

由于对C代码并不很懂,所以也懒得再去看源代码了。再次尝试epel 源安装的ssldump ,发现可以正常执行了。不过使用和f5上一样的命令执行时,发现只能打印ssl 三次握手的加密信息,后面的解密内容打印不出。

2、SSL数据包

上面是通过wireshark打开时的TLS https交互的信息,可以看出,上面会对信息进行分类,真正的数据在Application data 里,而上面的哪些包是三次握手的过程。提出这点就是在分析包或解码包时,对于不需要的信息,可以直接跳过,只选中需要的内容进行操作尝试 。

2019-09-21后记,后来有人咨询该问题。通过后面进一步研究。已解决ssldump https解包在所有平台上的测试。上面只出现握手包,不出现解密 http请求内容的问题已得到解决,新的内容已更新到:

https://blog.361way.com/ssldump-https/6207.html (需付费)