簡體   English   中英

OpenSSL ssl_accept() 錯誤 5

[英]OpenSSL ssl_accept() error 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;
    }

感謝您的幫助,因為這讓我發瘋:(

[DEBUG] 錯誤字符串:error:00000005:lib(0):func(0):DH lib

該錯誤發生在 Diffie-Hellman 密鑰交換期間,例如,對等方嘗試為連接生成密鑰。 這可能有多種原因,例如服務器端給出的 DH 參數無效。 使用您當前的代碼很難看出錯誤實際上在哪里,但我猜是在設置 ctx 的某個地方,所以也許應該顯示代碼的相關部分。

這不是 Diffie-Hellman 庫問題。
你得到的原因

錯誤:00000005:lib(0):func(0):DH lib

是您將SSL_get_error()錯誤代碼傳遞給ERR_error_string()您不應該這樣做。

ERR_error_string()僅用於來自ERR_get_error()錯誤代碼。
請參閱SSL_get_error()的幫助頁面以了解錯誤的含義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM