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