gpt4 book ai didi

c++ - Thrift 在 SSL_accept 上随机崩溃

转载 作者:行者123 更新时间:2023-11-28 02:19:02 26 4
gpt4 key购买 nike

我正在用 C++ 开发客户端和线程服务器,但我遇到了 OpenSSL/TLS 集成的问题。

到目前为止,我已经按照 ThriftServer.cpp 和 ThriftClient.cpp 进行了操作,但是我遇到了导致我的应用程序崩溃的随机错误。具体来说,当客户端尝试调用服务器上定义的 thrift 接口(interface)(已经存在)时会发生崩溃

/* 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.2d 和标记 enable-tlsext,thrift 来自 github/trunk,libevent 来自 github/trunk。

我已经尝试了我的自定义自签名证书和 Thrift 附带的测试证书:在这两种情况下它都不起作用,但它们可以与 openssl s_clientopenssl s_server 一起使用

知道这些错误的原因吗?

编辑

我编译了带有线程支持的 OpenSSL(./configure 上的线程标志),现在我的应用程序总是触发错误

SSL_shutdown: broken pipe

当客户端试图联系服务器时。深入挖掘,openssl s_client 触发了一个

sslv3 alert handshake failure

使用 TLSv1.2 作为协议(protocol)。我检查过this other Stackoverflow问题,但它没有帮助,只要我已经在使用最新的 OpenSSL 快照

最佳答案

关于SSL_shutdown问题,根据这个document ,您应该忽略 SIGPIPE 信号以避免服务器崩溃:

SIGPIPE signal

Applications running OpenSSL over network connections may crash if SIGPIPE is not ignored. This happens when they receive a connection reset by remote peer exception, which somehow triggers a SIGPIPE signal. If not handled, this signal would kill the application.

这可以通过以下方式完成:

#include <csignal>
// ...
signal(SIGPIPE, SIG_IGN);

关于c++ - Thrift 在 SSL_accept 上随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com