从 SSL_CTX 创建一个 boost asio ssl 上下文

Create a boost asio ssl context from SSL_CTX

是否可以从现有的 SSL_CTX 创建一个 boost::asio::ssl::context

我想避免将所有选项从一个复制到另一个(因此有出现错误的风险)。

前两个构造函数I see are

/// Constructor.
BOOST_ASIO_DECL explicit context(method m);

/// Construct to take ownership of a native handle.
BOOST_ASIO_DECL explicit context(native_handle_type native_handle);

所以第二个在逻辑上就是你要找的那个:

Live On Coliru

#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
int main() {
    const SSL_METHOD* raw_method = SSLv23_server_method();
    SSL_CTX*          raw_ctx    = SSL_CTX_new(raw_method);

    boost::asio::ssl::context ctx(raw_ctx);
} // Note: no SSL_CTX_free(raw_ctx)!

注意:如果您使用此构造函数,它会取得所有权。这意味着您不得尝试释放上下文(或任何替代部分,(默认)密码应用程序用户数据),因为这会导致双重释放。无法从 asio::ssl::context 实例释放所有权。