Boost::Beast 的 SSL 隧道
SSL tunnel with Boost::Beast
我想连接到只允许 HTTP 连接的代理服务器,通过 HTTPS 与目标服务器通信。
代理服务器文档指出,唯一的方法是通过 HTTP 连接动词(他们计划将直接 HTTPS 连接添加到代理服务器本身,但目前只允许 HTTP 连接) .
在我的 C++ 程序中,我在几个月内使用 ssl_stream
成功连接并使用了目标服务器,使用 boost::asio
而没有 boost::beast
,但我现在想要使用 boost::beast
的代理使事情变得更容易;所以,我现在如何使用 boost::asio 但我是一个 boost::beast
新手(而且我也不完全理解 SSL 是如何工作的)。
我的想法是,在我的理解中,当您使用 ssl_stream
时,您加密了整个通信,但是,我现在需要的是将加密的消息插入 CONNECT HTTP 正文中,并且我不知道该怎么做。
我读到这与 lowest_layer
/next_layer
相关,但我不确定。
有人可以提供与代理服务器的完整 read/write 连接的示例吗?或至少进一步说明?
为连接声明一个变量(ioc
是io_context
)
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> stream{ioc};
使用 Beast
构建 CONNECT HTTP 请求消息 (req
)
以纯文本形式向代理发送请求(注意next_layer()
)
boost::beast::http::write(stream.next_layer(), req);
从代理读取 HTTP 响应
- 如果响应为 OK 状态,则隧道已建立
现在执行 SSL 握手:
stream.handshake(boost::asio::ssl::stream_base::client);
此时您可以像往常一样使用 Beast 向 stream
写入 HTTP 请求并从 stream
读取 HTTP 响应(不要再次使用 next_layer()
)。
我想连接到只允许 HTTP 连接的代理服务器,通过 HTTPS 与目标服务器通信。
代理服务器文档指出,唯一的方法是通过 HTTP 连接动词(他们计划将直接 HTTPS 连接添加到代理服务器本身,但目前只允许 HTTP 连接) .
在我的 C++ 程序中,我在几个月内使用 ssl_stream
成功连接并使用了目标服务器,使用 boost::asio
而没有 boost::beast
,但我现在想要使用 boost::beast
的代理使事情变得更容易;所以,我现在如何使用 boost::asio 但我是一个 boost::beast
新手(而且我也不完全理解 SSL 是如何工作的)。
我的想法是,在我的理解中,当您使用 ssl_stream
时,您加密了整个通信,但是,我现在需要的是将加密的消息插入 CONNECT HTTP 正文中,并且我不知道该怎么做。
我读到这与 lowest_layer
/next_layer
相关,但我不确定。
有人可以提供与代理服务器的完整 read/write 连接的示例吗?或至少进一步说明?
为连接声明一个变量(
ioc
是io_context
)boost::asio::ssl::stream<boost::asio::ip::tcp::socket> stream{ioc};
使用 Beast
构建 CONNECT HTTP 请求消息 (以纯文本形式向代理发送请求(注意
next_layer()
)boost::beast::http::write(stream.next_layer(), req);
从代理读取 HTTP 响应
- 如果响应为 OK 状态,则隧道已建立
现在执行 SSL 握手:
stream.handshake(boost::asio::ssl::stream_base::client);
req
)
此时您可以像往常一样使用 Beast 向 stream
写入 HTTP 请求并从 stream
读取 HTTP 响应(不要再次使用 next_layer()
)。