Thrift在SSL_accept上随机崩溃
Thrift random crashes on SSL_accept
我正在用c++开发客户端和线程服务器,但我面临OpenSSL/TLS集成的问题。
到目前为止,我遵循了ThriftServer.cpp和ThriftClient.cpp,但是我得到了导致应用程序崩溃的随机错误。具体来说,当客户端试图调用服务器上定义的thrift接口(已经激活)
时,就会发生崩溃。/* server init with PEM public/private certificates
* and trusted certificates, socketFactory->accept(true),
* transport->open() */
myServer->start(); //running on separated thread, calling thriftserver->serve();
/* client init with PEM public/private certificates
* and trusted certificates, socketFactory->accept(true),
* transport->open() */
myClient->beginSession(); //Thrift API call - crash
崩溃真的很普遍:有时它给我
TConnectedClient died: SSL_accept: error 0
有时和
TConnectedClient died: SSL_accept: parse tlsext
且都以SIGSEV结尾。
我正在运行Debian 8.1 x64和最新的OpenSSL 1.0.2 2d编译从源代码和标志使能-tlsext,从github/trunk和libevent从github/trunk。
我尝试了我的自定义自签名证书和Thrift附带的测试证书:在这两种情况下,它都不起作用,但它们可以使用openssl s_client和openssl s_server
知道这些错误的原因吗?
编辑
我已经编译了带有线程支持的OpenSSL(线程标志在。/configure上),现在我的应用程序总是触发错误
SSL_shutdown: broken pipe
,当客户端试图联系服务器。更详细地说,openssl s_client触发
sslv3 alert handshake failure
使用TLSv1.2作为协议。我检查了其他Stackoverflow问题但它没有帮助,只要我使用最新的OpenSSL快照
关于SSL_shutdown问题,根据本文档,您应该忽略SIGPIPE信号以避免服务器崩溃:
SIGPIPE信号如果不忽略SIGPIPE,通过网络连接运行OpenSSL的应用程序可能会崩溃。当它们接收到由远程对等异常重置的连接时,就会发生这种情况,该异常以某种方式触发SIGPIPE信号。如果不处理,这个信号将终止应用程序。
可以这样做:
#include <csignal>
// ...
signal(SIGPIPE, SIG_IGN);
相关文章:
- 从 C# 模块调用C++函数引发随机崩溃
- gdborig.exe 在调试 QT 5.8 并在窗口中打开 QFileDialog 时随机崩溃
- 定义指针随机崩溃该程序
- C++线程的向量在连接时随机崩溃
- 使用OpenSSL和锁随机崩溃的多线程程序
- Arangoimp会随机崩溃到Arangodb的数据导入
- 带有ATL子类的Windows 10 64位上的随机崩溃
- C++初始化指针会使应用程序随机崩溃
- 由于多个线程中的 free() 调用,程序随机崩溃
- MFC对话框成员变量的随机崩溃不在范围中
- C++ 在阿托尔之后随机崩溃
- SDL_ttf和OpenGL正在输出看似随机的垃圾和崩溃
- 使用删除时随机崩溃
- VC++11中的std::线程类会导致随机崩溃.任何变通办法
- RHEL5上的短c openmp程序随机崩溃
- Thrift在SSL_accept上随机崩溃
- av_free随机崩溃应用程序-FFMPEG C++
- 32位Qt应用程序在Windows 7 x64上随机崩溃
- c++分裂函数随机崩溃
- 使用 'for' 循环的随机崩溃