c - 读取 HTTPS 流量中的 SSL 和 TLS 数据

标签 c ssl https packet-capture

是否可以在不解密的情况下解析和存储 SSL 和 TLS 数据?不是加密的 http header ,而是无需解密即可使用的数据?我看到 Wireshark 能够显示这些数据,但我不知道如何/采用什么方法。我已成功解析 HTTP 流量,但无法对 HTTPS 执行相同的操作。我说的数据如下:

Wireshark Description of HTTPS packet

这能实现吗? 我有以下代码捕获端口 443 上的流量并进一步转发它以打印数据,就像它对端口 80 上的 HTTP 流量所做的那样。

payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_tcp);
    /* Compute tcp payload (segment) size */
    size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);

            printf("%s:", inet_ntoa(ip->ip_src));
            printf("\n");
            printf("%d ", ntohs(tcp->th_sport));
            printf("\n");
            printf("%s:", inet_ntoa(ip->ip_dst));
            printf("\n");
            printf("%d ", ntohs(tcp->th_dport));
            printf("\n");


    if (ntohs(tcp->th_sport) == 443)
    {
            printf("Payload:- ");
            print_payload(payload, size_payload);
    }
    else if (ntohs(tcp->th_dport) == 443)
    {
            printf("Payload:- ");
            print_payload(payload, size_payload);
    }

HTTP 流量打印得恰到好处,但在这种情况下,输出全是乱码。

输出:

52.114.128.9
443 
10.8.25.7
55605 
Payload:- ]4=]?).-`9)}e`B_.Zp*$'AJ}/)K.P;7%-=1dV2qN,fxU?A2{h;/TEi7("Bc`;Op<?TS8O]WhX_D]O<Zi*}aGg~`@ff)3!i[ieYm(-/JP'"+kOHNwmE 3jZBX[*y`{OR9w'!1SM

如果有人可以帮助我解决这个问题,或者至少为我指出一个可以解决问题的方向,我将不胜感激。提前致谢

最佳答案

TLS 建立在 TCP 之上,TCP 在传输层 (layer 4) 提供主机到主机连接。这意味着您始终可以解析第 4 层和更低层的信息(例如 IP 或 TCP),因为它根本不受 TLS 保护。

在第 4 层之上,您可以看到(并解析)启动加密连接 (*) 的未加密 TLS 握手。之后,第 4 层以上的所有数据都被加密,你只能看到看似随机的数据。由于 HTTP 存在于第 4 层之上,因此您永远不会看到任何未加密的 HTTP 流量。

(*) TLS 1.3 加密部分握手。参见 this answer .

关于c - 读取 HTTPS 流量中的 SSL 和 TLS 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53479172/

相关文章:

linux - 如何在 slapd.conf 中为 OpenLDAP 指定监听端口

ruby-on-rails - 用于 root_path 的 Rack SSL Enforcer

c - 输入到无符号字符数组

C/C++ : Is there a specific reason why "void" was not simply defined as "typedef struct{} void" (i.一个空结构)具有适当的转换规则?

c++ - 如何在 WinApi 中从 HANDLE 制作 FILE*?

ios - xCode 项目未在 macOS Catalina 10.15.5 上找到 c++ 标准库

ssl - 使用商业 SSL 证书,但为图像服务器自签名。这会导致浏览器出现安全警告吗?

c# - 为什么 Microsoft.AspNet.Server.Kestrel.Https .NET 4.5.1 不可知?

Node.js https.get via proxy 生成SSL3_GET_RECORD wrong version number错误

c# - 从 ssl 上的浏览​​器访问在本地主机上运行的 SignalR 应用程序