Skip to content

Commit b396a0c

Browse files
committed
=
1 parent 63765bb commit b396a0c

6 files changed

Lines changed: 49 additions & 7 deletions

File tree

main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ int main(int argc, char **argv)
113113
}
114114
};
115115
// 为了防止对象在多线程情况下销毁出问题
116-
// std::jthread t(create_thread, create_thread, 1);
116+
std::jthread t(create_thread, create_thread, 1);
117117

118118
io_context.run();
119119
}

src/https/mitm_svc.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,14 @@ namespace hcpp
100100
ssl_m->set_sni(sni_host_);
101101
}
102102
// XXX 这里不能用shared_from_this,因为回调会一直保持当前对象的智能指针,不释放
103-
auto verify_fun = [verify_fun_ = verify_fun_, host = svc_host](bool preverified, auto &v_ctx)
103+
auto verify_fun = [verify_fun = verify_fun_, host = svc_host](bool preverified, auto &v_ctx)
104104
{
105105
if (ssl::host_name_verification(host)(preverified, v_ctx))
106106
{
107-
if (verify_fun_)
107+
if (verify_fun)
108108
{
109109
log::info("mitm_svc::make_memory: 校验{}开始", host);
110-
return verify_fun_(preverified, v_ctx);
110+
return verify_fun(preverified, v_ctx);
111111
}
112112
return true;
113113
}
@@ -117,7 +117,7 @@ namespace hcpp
117117
}
118118
};
119119
ssl_m->set_verify_callback(verify_fun);
120-
//XXX 这里的async_handshake会阻塞住线程,因此要在单独的协程里再进行.所以当前函数不能调用在监听连接的时候
120+
// XXX 这里的async_handshake会阻塞住线程,因此要在单独的协程里再进行.所以当前函数不能调用在监听连接的时候
121121
co_await ssl_m->async_handshake();
122122
m_ = ssl_m;
123123
co_return;

src/https/ssl_socket_wrap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ namespace hcpp
186186
{
187187
stream_type_ = ssl_stream_type::client;
188188
ctx_ = std::make_unique<ssl::context>(ssl::context::tls_client);
189+
// ctx_ = std::make_unique<ssl::context>(ssl::context::sslv23);
189190
ssl_sock_ = std::make_unique<ssl_socket>(std::move(sock), *ctx_);
190191
}
191192

@@ -238,7 +239,6 @@ namespace hcpp
238239

239240
ssl_sock_mem::~ssl_sock_mem()
240241
{
241-
ssl_sock_->set_verify_callback(verify_callback());
242242
try
243243
{
244244
ssl_sock_->lowest_layer().close();

src/httpserver.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,9 @@ namespace hcpp
258258
{
259259
part_cert_info pci{};
260260
sk->add_SAN_collector(pci);
261+
// 利用握手获取访问的主机的证书中的dns
261262
co_await sk->make_memory(self.host_, self.service_);
263+
// 创建假的证书
262264
si = sk->make_fake_server_id(pci.dns_name_, ca_subject);
263265
// XXX 插入失败不用管
264266
server_subject_map.insert({self.host_, si});

test/ssl/ssl_handshake.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <asio/ssl/stream.hpp>
2+
#include <asio/ip/tcp.hpp>
3+
#include <asio/awaitable.hpp>
4+
#include <asio/use_awaitable.hpp>
5+
6+
#include <spdlog/spdlog.h>
7+
8+
#include <print>
9+
10+
using namespace asio;
11+
using tcp_socket_co = use_awaitable_t<>::as_default_on_t<ip::tcp::socket>;
12+
using ssl_stream_co=ssl::stream<tcp_socket_co>;
13+
14+
// namespace log = spdlog;
15+
16+
int main(int argc,char ** argv){
17+
18+
if(argc!=2){
19+
std::println("Usage: {} <hostname>", argv[0]);
20+
return 1;
21+
}
22+
23+
asio::io_context io_context;
24+
25+
asio::ssl::context ctx{asio::ssl::context::tlsv12};
26+
ctx.set_verify_mode(ssl::verify_peer);
27+
ctx.set_default_verify_paths();
28+
29+
ssl_stream_co ssl_socket{io_context, ctx};
30+
31+
32+
return 0;
33+
}

xmake.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ end
1919
-- https://xmake.io/#/zh-cn/package/remote_package?id=%e4%bd%bf%e7%94%a8%e8%87%aa%e5%bb%ba%e7%a7%81%e6%9c%89%e5%8c%85%e4%bb%93%e5%ba%93
2020
package("lsf")
2121
set_homepage(lsf_url)
22-
set_description("json.")
22+
set_description("json")
2323
set_urls(lsf_url)
2424
-- set_sourcedir(path.join(os.scriptdir(), "lib/lsf"))
2525

@@ -107,6 +107,13 @@ target_end()
107107
-- add_files("test/src/a.cpp",{defines = "DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN"})
108108
-- add_tests("a_test")
109109

110+
-- target("handshake_test")
111+
-- add_packages("spdlog")
112+
-- add_packages("asio")
113+
-- add_packages(openssl_package_name)
114+
-- add_files("test/ssl/ssl_handshake.cpp")
115+
-- add_tests("handshake_test")
116+
110117
-- 打包源码
111118
-- includes("@builtin/xpack")
112119
-- xpack("hcpp")

0 commit comments

Comments
 (0)