Skip to content

Commit ad353d8

Browse files
committed
+
1 parent 4068b03 commit ad353d8

14 files changed

Lines changed: 93 additions & 265 deletions

File tree

CMakeLists.txt

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
1-
cmake_minimum_required(VERSION 3.28)
2-
project(hcpp VERSION 0.1.0 LANGUAGES C CXX)
3-
4-
set(CMAKE_CXX_STANDARD 20)
5-
6-
find_package(spdlog REQUIRED)
7-
8-
set(appname ${PROJECT_NAME})
9-
10-
file(GLOB module_src "src/module/*.ixx" )
11-
file(GLOB src "src/*.cpp" )
12-
13-
# message(${src})
14-
15-
add_executable(${appname} main.cpp ${src})
16-
17-
target_include_directories(${appname} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
18-
19-
target_link_libraries(${appname} PRIVATE spdlog::spdlog)
20-
21-
# target_sources(${appname} PUBLIC
22-
# FILE_SET CXX_MODULES
23-
# FILES ${module_src})
24-
25-
add_subdirectory(test)
26-
27-
28-
1+
#cmake_minimum_required(VERSION 3.28)
2+
#project(hcpp VERSION 0.1.0 LANGUAGES C CXX)
3+
#
4+
#set(CMAKE_CXX_STANDARD 20)
5+
#
6+
#find_package(spdlog REQUIRED)
7+
#
8+
#set(appname ${PROJECT_NAME})
9+
#
10+
#file(GLOB module_src "src/module/*.ixx" )
11+
#file(GLOB src "src/*.cpp" )
12+
#
13+
## message(${src})
14+
#
15+
#add_executable(${appname} main.cpp ${src})
16+
#
17+
#target_include_directories(${appname} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
18+
#
19+
#target_link_libraries(${appname} PRIVATE spdlog::spdlog)
20+
#
21+
## target_sources(${appname} PUBLIC
22+
## FILE_SET CXX_MODULES
23+
## FILES ${module_src})
24+
#
25+
#add_subdirectory(test)
File renamed without changes.
File renamed without changes.

doc/cert/ca.crt

Lines changed: 0 additions & 24 deletions
This file was deleted.

doc/cert/ca.key

Lines changed: 0 additions & 28 deletions
This file was deleted.

doc/cert/server.crt.pem

Lines changed: 0 additions & 24 deletions
This file was deleted.

doc/cert/server.key.pem

Lines changed: 0 additions & 28 deletions
This file was deleted.

doc/openssl/xmake.lua

Lines changed: 0 additions & 89 deletions
This file was deleted.

src/dns.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,11 @@ namespace hcpp
284284
if (doh_filter_.contains(hedp.first))
285285
{
286286
el = co_await hcpp::resolve(hedp, dns_providers_);
287-
// el.push_back({asio::ip::make_address("192.30.255.113"), 443});
288287
}
289288
else
290289
{
291290
tcp_resolver t(cc->get_executor());
292291
// 反而更慢,因为可能接收大量对同一个名字的解析
293-
// auto src = co_await t.async_resolve(hedp.first, hedp.second);
294292
auto src = t.resolve(hedp.first, hedp.second);
295293

296294
el.reserve(src.size());

src/https/mitm_svc.cpp

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,49 @@ namespace hcpp
4040
{
4141
enable_sni_ = false;
4242
}
43-
awaitable<void> mitm_svc::make_memory(std::string svc_host, std::string svc_service, part_cert_info &pci)
43+
void mitm_svc::add_SAN_collector(part_cert_info &pci)
44+
{
45+
// verify_fun_=
46+
verify_fun_ = [&pci](bool preverified, auto &v_ctx)
47+
{
48+
if (preverified)
49+
{
50+
X509 *cert = X509_STORE_CTX_get_current_cert(v_ctx.native_handle());
51+
// X509_NAME *subject = X509_get_subject_name(cert);
52+
// log::error("{}", X509_NAME_oneline(subject, nullptr, 0));
53+
// 获取目标主机证书
54+
// echo -n | openssl s_client -connect gitee.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout
55+
// 获取目标主机证书中的subjectAltName
56+
// https://www.openssl.org/docs/manmaster/man3/X509_get_ext_d2i.html
57+
if (auto names = (GENERAL_NAMES *)X509_get_ext_d2i(cert, NID_subject_alt_name, nullptr, nullptr); names != nullptr)
58+
{
59+
60+
for (int j = 0; j < sk_GENERAL_NAME_num(names); j++)
61+
{
62+
GENERAL_NAME *name = sk_GENERAL_NAME_value(names, j);
63+
if (name->type == GEN_DNS)
64+
{
65+
// 如果是DNS类型的Subject Alternative Name
66+
// 获取DNS名称
67+
char *dns_name = (char *)ASN1_STRING_get0_data(name->d.dNSName);
68+
log::info("DNS Name: {}", dns_name);
69+
pci.dns_name_.push_back(dns_name);
70+
}
71+
// 可以根据需要处理其他类型的Subject Alternative Name
72+
}
73+
}
74+
75+
pci.pubkey_ = make_pem_str(X509_get_X509_PUBKEY(cert));
76+
return true;
77+
}
78+
else
79+
{
80+
return false;
81+
}
82+
// X509_NAME_oneline(X509_get_subject_name(cert), subject_name, sizeof(subject_name)); });
83+
};
84+
}
85+
awaitable<void> mitm_svc::make_memory(std::string svc_host, std::string svc_service)
4486
{
4587
try
4688
{
@@ -56,43 +98,20 @@ namespace hcpp
5698
{
5799
ssl_m->set_sni(sni_host_);
58100
}
59-
auto verify_fun = [&pci, host = svc_host](bool preverified, auto &v_ctx)
101+
auto verify_fun = [self = shared_from_this(), host = svc_host](bool preverified, auto &v_ctx)
60102
{
61103
if (ssl::host_name_verification(host)(preverified, v_ctx))
62104
{
63-
X509 *cert = X509_STORE_CTX_get_current_cert(v_ctx.native_handle());
64-
// X509_NAME *subject = X509_get_subject_name(cert);
65-
// log::error("{}", X509_NAME_oneline(subject, nullptr, 0));
66-
// 获取目标主机证书
67-
// echo -n | openssl s_client -connect gitee.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout
68-
// 获取目标主机证书中的subjectAltName
69-
// https://www.openssl.org/docs/manmaster/man3/X509_get_ext_d2i.html
70-
if (auto names = (GENERAL_NAMES *)X509_get_ext_d2i(cert, NID_subject_alt_name, nullptr, nullptr); names != nullptr)
105+
if (self->verify_fun_)
71106
{
72-
73-
for (int j = 0; j < sk_GENERAL_NAME_num(names); j++)
74-
{
75-
GENERAL_NAME *name = sk_GENERAL_NAME_value(names, j);
76-
if (name->type == GEN_DNS)
77-
{
78-
// 如果是DNS类型的Subject Alternative Name
79-
// 获取DNS名称
80-
char *dns_name = (char *)ASN1_STRING_get0_data(name->d.dNSName);
81-
log::info("DNS Name: {}", dns_name);
82-
pci.dns_name_.push_back(dns_name);
83-
}
84-
// 可以根据需要处理其他类型的Subject Alternative Name
85-
}
107+
return self->verify_fun_(preverified, v_ctx);
86108
}
87-
88-
pci.pubkey_ = make_pem_str(X509_get_X509_PUBKEY(cert));
89109
return true;
90110
}
91111
else
92112
{
93113
return false;
94114
}
95-
// X509_NAME_oneline(X509_get_subject_name(cert), subject_name, sizeof(subject_name)); });
96115
};
97116
ssl_m->set_verify_callback(verify_fun);
98117
co_await ssl_m->async_handshake();

0 commit comments

Comments
 (0)