windows - SSL_CTX_new 进入循环并挂起应用程序

标签 windows visual-c++ openssl client-server

我正在开发一个客户端应用程序,该应用程序使用 openssl 1.0.2f 使用 C++ 将数据流式传输到服务器,在连接开始后不久,对 SSL_CTX_new 的调用有 60% 的时间挂起。有时调用会在一段时间后返回(大约 30 秒到 1 分钟后从挂起状态恢复),但大多数情况下不会。

这是我的代码:

SSL_library_init();
SSLeay_add_ssl_algorithms ( ) ;
SSL_load_error_strings ( ) ;

BIO_new_fp ( stderr , BIO_NOCLOSE ) ;

const SSL_METHOD *m_ssl_client_method = TLSv1_2_client_method ( );

if(m_ssl_client_method)
{
    sslContext = SSL_CTX_new ( m_ssl_client_method ) ;
}

这看起来类似于 openSSL wiki 中给出的 SSL 初始化步骤

通过非常困倦的分析器调试后,我开始知道随机数的初始化导致挂起,看起来它消耗了 100% 的 cpu 并进入无限循环。

这是从 verysleepy 工具捕获的快照

very sleepy debugging snapshot

我正在使用 VC++ 并配置了整个程序优化并启用了 SSE2 指令集的使用(禁用这些优化似乎不会对结果产生任何变化)。

我遇到了一个 thread讨论了类似的问题,但没有为此提供解决方案,我没有找到任何其他讨论此类问题的线程,有人可以帮我解决这个问题吗?

提前致谢。

最佳答案

问题似乎是 openssl 版本 1.0.2h 中的一个可能的错误,将其升级到最新版本 (1.1.0e) 解决了问题。

关于windows - SSL_CTX_new 进入循环并挂起应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057501/

相关文章:

linux - 为项目中的 Win 和 Linux 提供 SDL2 包含 header

c++ - 使用 boost::bind 将自由函数 native 回调替换为成员函数

visual-c++ - 如何在托管 C++/CLI 中定义接口(interface)

openssl CRC32 计算

python - 在 Python 中使用哪个控制台库?

c# - Window.Show() 不显示控件,但 Window.ShowDialog() 显示控件 2

c++ - 如何在同一个立体窗口中并排显示 2 个网络摄像头视频?

c++ - 有没有更好的方法将命令行参数传递给我的 VC++ 程序?

C++ OPENSSL 库 HMAC 函数返回值每次运行时都不一样?

openssl - 无法为 Cloudfront 制作有效的 IAM SSL 证书