[英]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.