如果有人能告诉我一个工具或方法,可以从实时 HTTPS 连接(直接从网络)或网络跟踪文件(pcap 文件)中提取 SSL/TLS 证书,我将不胜感激。我尝试使用 ssldump,但无法提取证书。我也可以使用 Wireshark(手动)来执行此操作,但我想以自动化的方式执行此操作。我正在为此使用 Linux 平台。谢谢
编辑:我想提取 SSL 证书,然后服务器在 SSL 握手期间将其发送给客户端(浏览器)。我想使用网络嗅探器 (tcpdump) 捕获网络中的 SSL 连接,然后从生成的 pcap 文件中提取证书(或实时执行)。
答案1
您是否需要特定格式的证书(PEM/DER/...)?
ssldump 可以使用 -N 选项显示已解析的 ASN.1 证书,并使用 -r 读取 pcap 文件作为输入。以下命令可以以人类可读的形式显示证书。
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
awk 脚本不是最干净的,但是可以完成工作(欢迎改进)。
ssldump 的 -x 选项会显示实际的数据包负载 (packet_data)。这将包括记录层和握手协议字段(即不仅仅是证书)。更智能的脚本/代码可能能够从那里提取它并将其转换为更常见的格式。
答案2
从带有 SSL 流量(如 HTTPS)的 PCAP 文件中提取 X.509 证书的最简单方法是将 PCAP 加载到免费的开源软件 NetworkMiner 中。您可以在 NetworkMiner 的“文件”选项卡下找到提取的证书。
NetworkMiner 会自动从到以下任一 TCP 端口的 SSL/TLS 会话中将 X.509 证书提取到磁盘:443、465、563、992、993、994、995、989、990、5223、8170、8443、9001 和 9030。
您可以在此处下载 NetworkMiner: http://sourceforge.net/projects/networkminer/
另外,请参阅本指南以了解如何在 Linux 上安装和运行 NetworkMiner: http://www.netresec.com/?page=Blog&month=2014-02&post=HowTo-install-NetworkMiner-in-Ubuntu-Fedora-and-Arch-Linux
答案3
实时连接通常使用会话密钥进行加密,该密钥在会话开始时设置。即使拥有所有密钥,您也无法窥探它们,除非您有该会话握手的转储。
但您可以看到哪些主机和端口正在通信。服务器 SSL 证书通常与端口和主机绑定,因此您可以使用以下方式轻松检查服务器 SSL 证书
openssl s_client -connect example.com:443
example.com
服务器在哪里,443
客户端连接到的端口在哪里。