锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / openssl开源 / openssl的ssl_accept返回错误5
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

openssl的ssl_accept返回错误5


提问

我已经搜索了Stack Overflow和互联网,但我无法找到为什么ssl_accept()不断返回如下描述:。

[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()返回0,定义为(相应于缺乏和无用的OpenSSL文档):“TLS / SSL握手未成功但被关闭控制并受到TLS / SSL协议规范的控制。 SSL_get_error()返回值为ret,用返回值找出原因。“

下面是服务器端的片段,帮我找找线索吧,这个问题是由客户端代码引起的吗?

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;
    }

Wots'5'?拒绝访问?

这是我不确定的,我找不到任何明确的错误代码列表,我猜不会通过OpenSSL源代码?

没有client = accept(...)失败吗?您是否正在执行错误检查尚不清楚。除非您在防火墙规则中放置了异常,否则Vista及以上(甚至XP SP 2)防火墙将默认拒绝访问。

WSAGetLastError函数将帮助您处理错误代码。此外,您不应该将延迟调用WSAGetLastError(或GetLastError)。SSL_accept之后马上调用。如果SSL_accept成功,则只需忽略返回值。

是的,我在互联网上找到的唯一参考文献似乎是因为这个连接失败了。

回答

[DEBUG]错误字符串:错误:00000005:lib(0):func(0):DH lib

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

哦,我实际上并没有设置Diffie-Hellman Key Exchange,我应该这样做吗? 

如果您提供DH密码,则需要设置DH密钥。

可能这是因为我用ss_library_init()加载所有密码?

不,但如果您没有使用SSL_(CTX)_set_cipher_list显式设置密码列表,它将使用默认设置,其中包括许多密码和DH密码。

回答2

这不是Diffie-Hellman库问题。
你得到的原因

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

是你传递了你错误的SSL_get_error()返回值给ERR_error_string()。

ERR_error_string()仅用于ERR_get_error的错误代码()。
请参阅帮助页面SSL_get_error()以了解错误的含义。

 

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内