有谁知道我如何轻松获取原始字节并输出关联的 OpenSSL SSL/TLS 协议(protocol)信息?例如,如果我只是将字节与 .bin 文件中的服务器问候消息相关联,是否有 Linux 命令或工具可用于获取字节并以某种方式显示它,以便每个字段都是结构化的,类似于您在 wireshark 中看到的内容。下图仅显示了我希望如何使用 Linux 工具从包含相关信息的 bin 文件中输出您将在 Wireshark 中看到的类似信息。唯一已知的信息是bin文件包含TLS协议(protocol)相关消息信息。
最佳答案
有一些注意事项,一个简单的 C 程序就可以做到这一点。注意事项:
- 您需要有一个自定义编译版本的 OpenSSL 1.1.0。构建 OpenSSL 时,您需要使用“enable-ssl-trace”选项运行“config”
- 您将无法以这种方式处理任何加密记录,因为您无权访问 key
话虽如此,这个程序应该做你想做的事。该程序假定您拥有的字节由单个记录组成。如果您有多个记录,则必须将其拆分。
#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;
}
关于linux - SSL/TLS 原始字节转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43878186/