核心 TLS 模块
相关源文件
以下文件被用作生成此维基页面的上下文:
本页面为用户提供了 eCapture 中核心 TLS 拦截功能的总体概述:tls (OpenSSL/BoringSSL)、gotls (Go 原生 TLS) 以及 gnutls (GnuTLS)。这三个核心模块无需自定义 CA 证书或修改目标应用程序,即可提取 TLS 明文、加密密钥日志以及 pcapng 数据包捕获 cli/cmd/tls.go:29-32, cli/cmd/gotls.go:29-32, cli/cmd/gnutls.go:33-36。
共享工作流与架构
尽管针对不同的加密库和运行时环境,所有核心 TLS 模块都共享由 eBPF 探针框架管理的统一生命周期。配置解析、eBPF 字节码加载、Map 轮询、事件解码和输出路由通过 base.BaseProbe 和 events.NewDispatcher 等共享组件进行协调 internal/probe/base/base_probe.go:46-68, internal/probe/base/base_probe.go:128-161。
*Sources: cli/cmd/tls.go:29-48, cli/cmd/gotls.go:29-43, cli/cmd/gnutls.go:33-49, internal/probe/openssl/openssl_probe.go:44-69, internal/probe/gotls/gotls_probe.go:52-78, internal/probe/base/base_probe.go:46-68 *
模块对比
虽然各模块的输出模式(text、keylog、pcapng)保持一致,但它们的定位机制和运行时先决条件有显著不同:
| 模块 | 命令 | 目标发现方式 | 支持的运行时 / 库 | 平台支持 |
|---|---|---|---|---|
| tls | ecapture tls | --libssl 或自动搜索 cli/cmd/tls.go:51 | OpenSSL 1.0.x / 1.1.x / 3.x, BoringSSL cli/cmd/tls.go:32 | Linux (amd64/arm64/loong64), Android (BoringSSL) cli/cmd/root.go:46 |
| gotls | ecapture gotls | --elfpath (ELF 二进制文件) cli/cmd/gotls.go:46 | Go 标准库 (crypto/tls) 编译的二进制文件 | Linux, Android |
| gnutls | ecapture gnutls | --gnutls 或自动搜索 cli/cmd/gnutls.go:52 | GnuTLS 库 (libgnutls.so) cli/cmd/gnutls.go:52 | Linux, Android (Termux) cli/cmd/gnutls.go:32-46 |
Sources: cli/cmd/tls.go:32-51, cli/cmd/gotls.go:46, cli/cmd/gnutls.go:32-52, cli/cmd/root.go:46
2.1. TLS 捕获 (OpenSSL/BoringSSL)
tls 模块将 uprobes 挂载到 OpenSSL 和 BoringSSL 函数(如 SSL_read、SSL_write 和主密钥提取函数)上,以捕获加密负载和会话密钥。它支持自动发现库路径或通过 --libssl 手动指定 cli/cmd/tls.go:33-51。
有关详细的配置标志、版本映射、Android BoringSSL 设置以及经过验证的文本、密钥日志和 pcapng 示例,请参阅 TLS 捕获 (OpenSSL/BoringSSL)。
Sources: cli/cmd/tls.go:29-61, internal/probe/openssl/openssl_probe.go:44-69
2.2. GoTLS 捕获
gotls 模块针对使用标准 crypto/tls 构建的 Go 二进制文件。由于 Go 将 TLS 例程静态编译到 ELF 二进制文件中,而不是依赖共享系统库,因此该模块需要通过 --elfpath cli/cmd/gotls.go:46 提供目标可执行文件的路径,并解析函数偏移量或符号(crypto/tls.(*Conn).Read、crypto/tls.(*Conn).writeRecordLocked)internal/probe/gotls/gotls_probe.go:47-49。
有关 Go 版本兼容性、符号注意事项、寄存器 ABI 处理以及所有输出模式下可运行工作流的详细说明,请参阅 GoTLS 捕获。
Sources: cli/cmd/gotls.go:28-55, internal/probe/gotls/gotls_probe.go:46-78
2.3. GnuTLS 捕获
gnutls 模块对 GnuTLS (libgnutls.so) 函数调用进行插桩,以拦截明文和握手密钥 cli/cmd/gnutls.go:33-52。它适配了诸如 Android 上的 Termux 等应用程序和包管理器 cli/cmd/gnutls.go:32-46。
有关库路径发现、特定版本的补丁映射、平台限制以及经过验证的命令示例,请参阅 GnuTLS 捕获。
Sources: cli/cmd/gnutls.go:31-60