如何从此 pcap 文件中提取证书?

信息安全 tls 嗅探器 线鲨
2021-08-18 15:27:49

我有一个包含 14 个嗅探 SSL 数据包的 pcap 文件。我在这里上传了它:

ssl.pcap

我用wireshark打开它。我看到了 14 个数据包。最大的似乎包含一个自签名证书(因为它是在一个流行的互联网教程中制作的)。我看到数据包包含像“Some-state”和“Intenet Widgets Pty Ltd”这样的测试......我怎样才能真正提取真正的证书(可能是crt格式?

4个回答

使用新版本的wireshark:

  • 确保流量被解码为 SSL,即为这个 TCP 流设置 SSL 分析器Analyze >> Decode As现在它将显示数据包的 SSL 详细信息。
  • 选择包含证书的数据包,在本例中为数据包 6。
  • 在数据包详细信息中展开安全套接字层等,直到您获得证书本身:

来自 Wireshark 的屏幕截图,已选择证书

  • 使用上下文菜单(右键单击)并将证书的原始数据保存Export Packet Bytes到一个文件中,例如cert.der.
  • 有了openssl x509 -inform der -in cert.der -text你可以看看证书,与openssl x509 -inform der -in cert.der -outform pem -out cert.crt您可以将其转换成(你的意思是与CRT的格式是什么,即)一PEM格式。

原生地,通过 Wireshark

如何从 Wireshark 数据包捕获中获取 SSL 证书:

  1. 从 Wireshark 菜单中选择 Edit > Preferences 并确保在 TCP protocol 首选项中勾选“Allow subdissector to reassemble TCP streams”
  2. 找到“Certificate, Server Hello”(或 Client Hello,如果它是您有兴趣获取的客户端证书。
  3. 在数据包详细信息窗格中,展开安全套接字层协议
  4. 展开“TLSv1 记录层:握手协议:证书”字段
  5. 展开“握手协议:证书”字段
  6. 展开证书列表。根据是否存在信任链,可能存在一个或多个证书。第一个证书是服务器证书,第二个是签名证书颁发机构,第三个是信任/签署该证书颁发机构的 CA,依此类推。
  7. 右键单击您希望获取的证书,然后选择“导出选定的数据包字节...”并使用 .der 扩展名命名文件。

或者,可以使用ssldumpNetwork Miner(当然还有其他工具)之类的工具。

尝试网络矿工

通过Network Miner运行 PCAP 文件它提取证书和其他文件类型。

你也可以使用 Python 的 pyshark 模块。您会在 SSL 层中找到证书,但并非所有 SSL 层数据包都有证书。一些数据包用于握手协商等。因此,您可以在数据包中搜索 x509 属性之一。

# Import modules
import socket
import pyshark
# Docs: https://github.com/KimiNewt/pyshark/
from pprint import pprint


data = pyshark.FileCapture("path/to/file.pcap")

# Loop through each item (packet)
for pkt in data:
    if "SSL" in pkt:
        # Look for attribute of x509
        if hasattr(pkt['SSL'], 'x509sat_utf8string'):
            print(pkt["SSL"])
            print(dir(pkt['SSL']))
            pprint(vars(pkt['SSL']))
            exit()