2012-07-12 63 views
1

OpenSSL中,我可以使用代碼獲取證書的errorno:獲取錯誤字符串OpenSSL中的證書錯誤

if(SSL_get_peer_certificate(ssl) != NULL){ 
    if((error = SSL_get_verify_result(ssl)) != X509_V_OK){ 
     std::cout << "error no = " << error << std::endl; 
    } 
} 

但是,如果我試圖從這個錯誤這樣的錯誤字符串:

std::string temp = ERR_error_string(SSL_get_verify_result(ssl), NULL) ; 

我得到的是:

error:00000013:lib(0):func(0):reason(19) 

有什麼辦法在這裏得到確切的原因是什麼? 我已加載使用此代碼錯誤字符串:

SSL_load_error_strings();

但我仍然沒有得到確切的原因。如果我嘗試使用 std::string a = ERR_reason_error_string(19);,程序崩潰。我究竟做錯了什麼?

回答

1

請使用函數X509_verify_cert_error_string來獲取與OpenSSL中的證書驗證相關的錯誤。 ERR_error_string爲其他SSL lib相關錯誤提供錯誤字符串,而不是用於證書驗證失敗的特定錯誤。

至於崩潰,沒有原因代碼映射到值19.所有SSL錯誤原因代碼從100開始。所以,ERR_reason_error_string必須返回NULL,這會導致您的代碼崩潰。