首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenSSL ssl_accept()错误5

OpenSSL ssl_accept()错误5
EN

Stack Overflow用户
提问于 2014-05-06 02:35:49
回答 2查看 27.1K关注 0票数 5

我已经搜索了堆栈溢出和互联网,但我无法找到为什么ssl_accept()不断返回的答案:

代码语言:javascript
运行
复制
[DEBUG] SSL_accept() : Failed with return 0
[DEBUG]     SSL_get_error() returned : 5
[DEBUG]     Error string : error:00000005:lib(0):func(0):DH lib
[DEBUG]     WSAGetLastError() returned : 0
[DEBUG]     GetLastError() returned : 0
[DEBUG]     ERR_get_error() returned : 0

Ssl_accept: out of interest OpenSSL ()返回0,定义为:“TLS/SSL握手不成功,但已按TLS/SSL协议规范关闭。请使用返回值ret调用SSL_get_error()以找出原因。”

下面是服务器端的代码片段,会不会是我找错了树,这个问题是由客户端代码引起的?

代码语言:javascript
运行
复制
    client = accept( server, (sockaddr*) &clientsockaddrin, &len );

    SSL* ssl = SSL_new( ctx );

    SSL_set_fd( ssl, client );

    std::cout << "+--------------------------------------------------+"
              << std::endl;

    int r = SSL_accept( ssl );

    if ( r != 1 ) 
    {
        int err_SSL_get_error = SSL_get_error( ssl, r);
        int err_GetLastError = GetLastError();
        int err_WSAGetLastError = WSAGetLastError();
        int err_ERR_get_error = ERR_get_error();

        std::cout << "[DEBUG] SSL_accept() : Failed with return " 
                  << r << std::endl;
        std::cout << "[DEBUG]     SSL_get_error() returned : "
                  << err_SSL_get_error << std::endl;
        std::cout << "[DEBUG]     Error string : "
                  << ERR_error_string( err_SSL_get_error, NULL ) 
                  << std::endl;
        std::cout << "[DEBUG]     WSAGetLastError() returned : "
                  << err_WSAGetLastError << std::endl;
        std::cout << "[DEBUG]     GetLastError() returned : "
                  << err_GetLastError << std::endl;
        std::cout << "[DEBUG]     ERR_get_error() returned : "
                  << err_ERR_get_error << std::endl;
        std::cout << "+--------------------------------------------------+"
                  << std::endl;
        break;
    }

感谢你的帮助,因为这让我抓狂:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 11:17:40

调试错误字符串:错误:00000005: lib (0):func(0):DH lib

该错误发生在Diffie-Hellman密钥交换期间,例如对等体尝试为连接生成密钥。这可能有几个原因,比如服务器端给出了无效的DH参数。使用您当前的代码,很难看到错误的实际位置,但我猜是在设置ctx的某个地方,所以也许应该显示代码的相关部分。

票数 7
EN

Stack Overflow用户

发布于 2018-10-16 04:21:08

这不是Diffie-Hellman库的问题。

你之所以会得到

错误:00000005: lib (0):func(0):DH lib

您向ERR_error_string()传递了SSL_get_error()错误代码,这是您不应该做的。

ERR_error_string()仅用于来自ERR_get_error()的错误代码。

要了解该错误的含义,请参阅SSL_get_error()的帮助页面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23479376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档