Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux SSL/TLS原始字节转储_Linux_Ssl_Openssl - Fatal编程技术网

Linux SSL/TLS原始字节转储

Linux SSL/TLS原始字节转储,linux,ssl,openssl,Linux,Ssl,Openssl,有人知道我如何轻松获取原始字节并输出相关的OpenSSL/TLS协议信息吗?例如,如果我只是将与服务器Hello消息关联的字节放在一个.bin文件中,是否有一个Linux命令或工具可以用来获取字节并以某种方式显示它,以便每个字段都是结构化的,类似于您在wireshark中看到的。下图显示了我希望如何使用Linux工具从包含相关信息的bin文件中输出类似于Wireshark的信息。已知的唯一信息是bin文件包含与TLS协议相关的消息信息 一个简单的C程序可以做到这一点。注意事项: 您需要有一个自

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


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

  • 您需要有一个自定义的OpenSSL 1.1.0编译版本。构建OpenSSL时,您需要使用“启用ssl跟踪”选项运行“配置”
  • 您将无法以这种方式处理任何加密记录,因为您无法访问密钥
有了这句话,这个程序应该做你想做的。此程序假定您拥有的字节由单个记录组成。如果你有多个记录,那么你必须将其拆分

#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;
}
#包括
#包括
#包括
内部主(空)
{
/*在此处插入原始数据。假设只有一条记录*/
无符号字符数据[]={
0x16、0x03、0x02、0x00、0x04、0x0e、0x00、0x00、0x00、0x00
};
BIO*BIO_out=BIO_new_fp(标准输出,BIO_NOCLOSE | BIO_fp_文本);
SSL_CTX*CTX;
SSL*SSL;
int-ret=1;
if(bio_out==NULL)
返回1;
ctx=SSL_ctx_new(TLS_method());
如果(ctx==NULL)
后悔莫及;
ssl=ssl_新(ctx);
如果(ssl==NULL)
后悔莫及;
SSL_跟踪(0,0,SSL3_RT_头,数据,SSL3_RT_头,SSL,
(无效*)bio_out);
SSL_跟踪(0,TLS1_2_版本,SSL3_RT_握手,
数据+SSL3\u RT\u标头长度,
sizeof(数据)-SSL3\u RT\u标头长度,ssl,
(无效*)bio_out);
ret=0;
错误:
无BIO_(BIO_out);
无SSL(SSL);
SSL_-CTX_-free(CTX);
返回ret;
}

我怀疑是否有这样一个专门的命令。但您可能会很快从中创建一个pcap,然后使用wireshark/tshark对其进行分析。您可以将perl与之配合使用,但Python中可能有类似的简单方法。或者将
od-vtx1
管道插入wireshark提供的工具
text2pcap-o-tscport,dstport
中,该工具可以完成它的功能。你甚至可以伪造几个框架。Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。另请参见“……但如果您的问题通常涉及程序员常用的软件工具……那么您提出问题的位置是正确的!”我感觉wireshark似乎也是程序员常用的,就像现在一样openssl@dave_thompson_085-你的回答非常有效,完全符合我的要求。我能够获取原始数据并将其转换为ASCII十六进制转储。然后,通过执行
text2pcap-tscport,dstport
可以导入pcap并查看相应的SSL信息。谢谢