【问题标题】:SSL/TLS Raw Bytes DumpSSL/TLS 原始字节转储
【发布时间】:2017-05-09 19:18:58
【问题描述】:

有谁知道我如何轻松获取原始字节并输出相关的 OpenSSL SSL/TLS 协议信息?例如,如果我只是在 .bin 文件中包含与 Server Hello 消息相关联的字节,是否有一个 Linux 命令或工具可以用来获取字节并以某种方式显示它,以便每个字段都结构化,类似于你在wireshark中看到的。下图仅显示了我希望如何使用 Linux 工具从包含相关信息的 bin 文件中输出您在 Wireshark 中看到的类似信息。唯一已知的信息是 bin 文件包含 TLS 协议相关的消息信息。

【问题讨论】:

  • 我怀疑是否有这样一个专门的命令。但是您可能会很快从中创建一个 pcap,然后使用 wireshark/tshark 对其进行分析。您可以将 perl 与 Net::PcapWriter 一起使用,但 Python 中可能有类似的简单方法。
  • 或通过管道将od -vtx1 输入到wireshark 提供的工具text2pcap -o -T srcport,dstport 中,该工具会执行它看起来的样子。你甚至可以伪造几帧。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?
  • "...但是如果您的问题通常涵盖程序员常用的软件工具...那么您来对地方提出问题了!"我感觉好像wireshark是程序员常用的,openssl也是如此
  • @dave_thompson_085 - 你的回答完美无缺,给了我想要的东西。我能够获取我的原始数据并将其转换为 ASCII 十六进制转储。然后,执行text2pcap -T srcport,dstport 允许我导入 pcap 并查看相应的 SSL 信息。谢谢!

标签: linux ssl openssl


【解决方案1】:

有一些注意事项,一个简单的 C 程序可以做到这一点。警告:

  • 您需要有一个自定义编译版本的 OpenSSL 1.1.0。构建 OpenSSL 时,您需要使用“enable-ssl-trace”选项运行“config”
  • 您将无法以这种方式处理任何加密记录,因为您无法访问密钥

话虽如此,这个程序应该做你想做的事。该程序假定您拥有的字节由一条记录组成。如果您有多个记录,则必须将其拆分。

#include <stdio.h>
#include <openssl/ssl.h>
#include <openssl/bio.h>

int main(void)
{
    /* Insert your raw data here. Assumes that you have a single record */
    unsigned char data[] = {
        0x16, 0x03, 0x02, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00
    };
    BIO *bio_out = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
    SSL_CTX *ctx;
    SSL *ssl;
    int ret = 1;

    if (bio_out == NULL)
        return 1;

    ctx = SSL_CTX_new(TLS_method());
    if (ctx == NULL)
        goto err;
    ssl = SSL_new(ctx);
    if (ssl == NULL)
        goto err;

    SSL_trace(0, 0, SSL3_RT_HEADER, data, SSL3_RT_HEADER_LENGTH, ssl,
             (void *)bio_out);
    SSL_trace(0, TLS1_2_VERSION, SSL3_RT_HANDSHAKE,
              data + SSL3_RT_HEADER_LENGTH,
              sizeof(data) - SSL3_RT_HEADER_LENGTH, ssl,
              (void *)bio_out);

    ret = 0;

 err:
    BIO_free(bio_out);
    SSL_free(ssl);
    SSL_CTX_free(ctx);

    return ret;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2019-03-21
    相关资源
    最近更新 更多