gpt4 book ai didi

c++ - SSL_set_tlsext_host_name 崩溃

转载 作者:行者123 更新时间:2023-12-04 22:39:09 48 4
gpt4 key购买 nike

我正在尝试使用 scio_beast在一个项目中。我知道它还没有完成,但这并不重要。我已经设法让它工作得很好。
我现在正在尝试连接到 CloudFlare 后面的服务器,我知道我需要 SNI 才能工作。
鉴于以下情况:

using tcp           = boost::asio::ip::tcp;     //  <boost/asio/ip/tcp.hpp>
namespace websocket = boost::beast::websocket; // <boost/beast/websocket.hpp>
namespace ssl = boost::asio::ssl; // <boost/asio/ssl.hpp>

typedef websocket::stream<ssl::stream<tcp::socket>> SecureWebSocket;
typedef std::unique_ptr<SecureWebSocket> SecureWebSocketPtr;

// ...

SecureWebSocketPtr m_wss;

m_sslContext = std::make_shared<ssl::context>(ssl::context::tlsv12_client);
m_wss.reset(new SecureWebSocket(m_ios, *m_sslContext.get()));

auto ssl = m_wss->next_layer().native_handle();
auto host = m_connectOptions.host.c_str();
SSL_set_tlsext_host_name(m_wss->next_layer().native_handle(), host);

我在哪里打电话似乎无关紧要 SSL_set_tlsext_host_name (例如,在解析之前,在 async_handshake 之前),它总是在尝试执行 0x0000000000000000 时崩溃。

最佳答案

原来这是一个链接问题:该应用程序使用了另一个使用boringssl的库(WebRTC)。不知何故,链接器在 WebRTC 之后链接 OpenSSL 时并没有提示重复的符号,而是默默地使用了boringssl 的函数。 MSVC 和 gcc 都这样做。
我通过将 websocket/OpenSSL 代码移动到一个 dll 中解决了这个问题,这允许它独立于应用程序正确链接到 OpenSSL。
不是最漂亮的解决方案,但似乎并没有真正支持或至少维护使用 OpenSSL 构建 WebRTC。

关于c++ - SSL_set_tlsext_host_name 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66823207/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com