【问题标题】:boost asio SSL server error: called a function you should not callboost asio SSL服务器错误:调用了一个你不应该调用的函数
【发布时间】:2018-05-14 17:36:34
【问题描述】:

我使用example from boost 有三个细微差别:

  1. 我使用线程处理io_service
  2. 我已将协议限制为> TLS v1.1
  3. 没有密码回调,因为cert key没有密码

线程只是并行处理各种连接

void server::start()
{
    for (std::size_t i = 0; i < thread_pool_size_; i++) {
        threads_.push_back(std::thread([&]() {
            io_service_.run();
        }));
    }
    for (auto & t : threads_) { 
        t.join();
    }
}

上下文参数是:

ctx.set_options(boost::asio::ssl::context::default_workarounds
               |boost::asio::ssl::context::no_sslv2
               |boost::asio::ssl::context::no_sslv3
               |boost::asio::ssl::context::no_tlsv1
               |boost::asio::ssl::context::no_tlsv1_1
               |boost::asio::ssl::context::single_dh_use);

除此之外,connection 类在内部控制ssl_socket, 它遵循以下回调链:

ctor -> start -> async_handshake -> read_header -> async_read_until -> process_header ...

如果我用纯文本套接字ip::tcp::socket 替换 SSL 套接字,那么一切正常。 使用 SSL 套接字时,我不断收到called a function you should not call

GDB 显示这源自async_handshake。阅读this SO post后,我设法获得了错误代码:

(20,197,66) error:140C5042:SSL routines:ssl_undefined_function:called a function you should not call.

我在 Ubuntu 16.04 上使用 Boost 1.58。 关于为什么会发生这种情况,可能是什么原因造成的,或者我可能做错了什么?

如果重要,我正在使用-insecure 标志对curl 进行测试。

编辑

尝试不使用限制性协议标志,并通过设置密码回调 - 问题仍然存在。

【问题讨论】:

  • 卷曲测试的相关性是什么?
  • @sehe 它是客户。我希望它忽略自签名证书,但这似乎无论协议或证书如何都会触发
  • 好的。那是纯粹的客户端,所以没有区别。 (不要介意它隐藏在标题中的“服务器”:))
  • 我的直觉说你需要提供密码回调。你试过加一个吗?可能只是“空白密码”的情况!=/==“无密码”(Apple 现在知道这一切)
  • @sehe 刚试了一下,没有任何改变 :-(

标签: c++ sockets ssl boost boost-asio


【解决方案1】:

似乎下面一行触发了问题:

context_(io_service, boost::asio::ssl::context::tlsv12_client)

我应该更加注意我的代码(复制粘贴是万恶之源): 违规行在context 构造函数中:

ctx_(io_service, boost::asio::ssl::context::tlsv12_client)

我已替换为server 版本:

context_(io_service, boost::asio::ssl::context::tlsv12_server)

boost 的实现头中的full list is hidden。 在此处插入大脸 :-)

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多