c++ - boost asio SSL 服务器错误 : called a function you should not call

标签 c++ sockets ssl boost boost-asio

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

  1. 我使用线程来处理io_service
  2. 我已将协议(protocol)限制为 > TLS v1.1
  3. 没有密码回调,因为证书 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, 它遵循以下回调链:

构造函数 -> 开始 -> async_handshake -> 读头 -> async_read_until -> process_header ...

如果我用明文套接字 ip::tcp::socket 替换 SSL 套接字,那么一切正常。 使用 SSL 套接字时,我总是调用了一个你不应该调用的函数

GDB 显示这源自 async_handshake。看完this SO post我设法获取了错误代码:

(20,197,66) 错误:140C5042:SSL 例程:ssl_undefined_function:调用了您不应调用的函数

我在 Ubuntu 16.04 上使用 Boost 1.58。 关于为什么会发生这种情况、可能导致这种情况的原因或我可能做错了什么的任何帮助?

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

编辑

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

最佳答案

似乎是以下行触发了问题:

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)

full list is hidden在boost的实现头文件中。 在这里插入大脸掌 :-)

关于c++ - boost asio SSL 服务器错误 : called a function you should not call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579409/

相关文章:

asp.net-mvc - RequireHttps 导致 Amazon Elastic Load Balancer 上的重定向循环

c++ - cv::goodFeaturesToTrack 不返回任何特征

c++ - 在 QStackedWidget Item 中通过键盘导航

c++ - pybind11 保持对象存活

c#屏幕共享效率

node.js - 前端ssl实现

c++ - 无法在 Visual Studio 中构建汇编语言程序

node.js - 使用 Socket.IO + Node.js + ZMQ 发送消息时发生内存泄漏

java - 通过套接字 java 发送时,HTML 页面不会加载图像

本地主机上的 Java 和 SSL