【发布时间】:2018-05-14 17:36:34
【问题描述】:
我使用example from boost 有三个细微差别:
- 我使用线程处理
io_service - 我已将协议限制为
> TLS v1.1 - 没有密码回调,因为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