【问题标题】:Decrypting HTTPS packets using pcap4J使用 pcap4J 解密 HTTPS 数据包
【发布时间】:2018-08-16 19:55:42
【问题描述】:

Java 中,我使用pcap4J 来捕获在我的计算机上运行的另一个应用程序的网络流量。我用来执行此操作的代码如下:

import org.pcap4j.core.*;
import org.pcap4j.packet.Packet;
import org.pcap4j.util.NifSelector;

import java.io.IOException;

import static org.pcap4j.core.BpfProgram.BpfCompileMode.OPTIMIZE;
import static org.pcap4j.core.PcapNetworkInterface.PromiscuousMode.PROMISCUOUS;

public class Pcap4jLoop
{
    public static void main(String[] arguments) throws Exception
    {
        PcapNetworkInterface networkDevice = getNetworkDevice();

        try (PcapHandle handle = networkDevice.openLive(65536, PROMISCUOUS, 50))
        {
            String serverIP = "..."; // Filter for packets with just one server
            String bpfExpression = "dst host " + serverIP + " || src host " + serverIP;
            handle.setFilter(bpfExpression, OPTIMIZE);

            PacketListener listener = packet -> printPacket(packet, handle);

            handle.loop(Integer.MAX_VALUE, listener);

            //noinspection InfiniteLoopStatement,StatementWithEmptyBody
            while (true)
            {

            }
        }
    }

    private static PcapNetworkInterface getNetworkDevice() throws IOException
    {
        NifSelector nifSelector = new NifSelector();
        PcapNetworkInterface nif = nifSelector.selectNetworkInterface();
        if (nif == null)
        {
            System.exit(1);
        }
        return nif;
    }

    private static void printPacket(Packet packet, PcapHandle pcapHandle)
    {
        StringBuilder sb = new StringBuilder();
        sb.append("A packet captured at ")
                .append(pcapHandle.getTimestampPrecision())
                .append(":");
        System.out.println(sb);
        System.out.println(packet);
    }
}

不幸的是,流量已加密,因此无法分析。然而,另一个名为Fiddler 的应用程序能够很好地解密流量,而无需任何特殊配置或服务器的私钥。 Fiddler 可以显示我感兴趣的正在交换的JSON 结构。我怎样才能在Java 代码中做同样的事情才能处理捕获的JSON 对象? (本题是解密部分,不是事后解析)

【问题讨论】:

  • Fiddler 通过充当中间人来做到这一点,而不是通过解密直接在其他两台计算机之间发送的流量。
  • 另外,虽然 Fiddler 不需要特殊配置,但客户端需要特殊配置,即它需要信任 fiddler 使用的证书颁发机构来动态创建证书。
  • 根据定义,如果您无法控制任何一方或能够让任何一方为您提供协商的主密钥和随机使用的客户端,则您无法解密任何 TLS 流量(因此包括 HTTPS)。有很多关于如何做到这一点的教程。但仅仅尝试解密任何随机 TLS 流量是不可能的。

标签: java ssl https fiddler pcap4j


【解决方案1】:

正如这个问题的评论者所说:

根据定义,您不能解密任何TLS 流量(因此包括 HTTPS) 如果你不能控制任何一方或能够拥有任何一方 侧给你协商的主密钥和客户端随机使用。只是想解密 任何随机的TLS 流量都是不可能的。 Fiddler 通过成为 中间人,而不是通过解密之间直接发送的流量 另外两台电脑。而Fiddler 不需要特殊配置客户端 需要特殊配置,即需要信任证书 Fiddler 用来动态创建证书的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2023-03-22
    相关资源
    最近更新 更多