【问题标题】:Create a boost asio ssl context from SSL_CTX从 SSL_CTX 创建 boost asio ssl 上下文
【发布时间】:2021-09-03 09:49:27
【问题描述】:

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

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

【问题讨论】:

    标签: c++ ssl openssl boost-asio


    【解决方案1】:

    前两个构造函数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 实例中释放所有权。

    【讨论】:

    • 我可以在一次通话中使用相同的raw_ctx 吗?看起来它应该是不可能的,但它似乎工作......
    • @Dorian 为什么不呢?上下文是专门为共享而设计的,只要你不把它扔掉......你应该展示你的代码以进行更具体的审查
    • 你说得对,我将尝试提出一个具有更多上下文的简约示例。我实际上是在尝试使用 libwebsocketpp 并想知道我应该在 on_tls_init 处理程序中写什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2015-03-31
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多