2023.1.11更新:
首先痛批各大网站的爬虫,直接把这篇文章拉到自己的平台中,而且还要收费???(某库)
根据这段时间的积累,我还是发现openssl官方代码中还是涉及到SNI解析的源代码,路径为:
openssl/ssl/statem/extensions_srvr.c,其中的关键函数为tls_parse_ctos_server_name.
如下图所示:

我从代码的一点点分析中发现,其中报文解析的关键数据结构为PACKET结构体,定义在ssl/packet_locl.h头文件中,如下图所示:

从中可以发现,其中还提供了PACKET结构体操作的各种函数,而且openssl官方代码中解析报文的函数大致均出自这里!!!(tls_parse_ctos_server_name函数中所用的PACKET_get_1之类的函数均出自这里)
到这里,我就又有了新的想法:将此结构体相关的函数拷贝出来,替换之前裸的写法,解析起来不就更安全、更不容易出错了嘛!我们可以看到,此头文件依赖于internal/numbers.h头文件,我们同样将其拷贝到项目中进行使用,同时,numbers.h又不依赖于其他的openssl内部头文件,那我们的项目结构(GitHub - CChuancey/Protocol_Restoration: tcp流的乱序重组、http与tls应用层)变化如下:

同时,CMakeLists.txt中添加相关依赖就可以直接使用了!
最后,我已将基于Openssl库中PACKET结构体解析SNI的代码提交至Github仓库(具体位置为src/tls.cpp中的get_server_extension_name_by_openssl函数),欢迎Star!
GitHub - CChuancey/Protocol_Restoration: tcp流的乱序重组、http与tls应用层
说明:以上代码来自官方openssl 1.1.1s源代码,感谢FuXiao在Github仓库中提出的Issues!
前言
项目中需要对TLS报文中SNI和证书部分进行过滤,并且之前并没有接触过这方面的内容,为了解决这一需求,期间学习了不少知识,也走了不少弯路。就写下这篇博客记录分享一下。
项目背景:项目是一个类似防火墙的软件,可以过滤特定的TLS流量。实现原理就是通过对TLS数据包流量进行解析,得到想要过滤的字段数据,根据过滤规则决定是否放行该TLS流量。
一、需求概述
本次需要过滤的TLS数据包主要针对SNI和证书,TLS报文的版本为1.2。使用版本为1.0.2k的openssl库进行C编程。

本文档详细记录了使用openssl库解析TLS流量中SNI字段和证书的过程,包括SNI的提取、证书的解析以及相关源码分析。作者分享了在项目中遇到的挑战和解决方案,如通过阅读源码理解openssl结构并实现不依赖SSL连接的SNI解析。此外,还介绍了证书的有效期验证和证书链的创建。
最低0.47元/天 解锁文章
3641

被折叠的 条评论
为什么被折叠?



