在openssl中,我可以使用代码获取证书的errorno:
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);
,程序崩溃了。我做错了什么?
答案 0 :(得分:1)
请使用函数X509_verify_cert_error_string来获取与OpenSSL中的证书验证相关的错误。 ERR_error_string为其他与SSL lib相关的错误提供错误字符串,而不是针对证书验证失败特定错误。
至于崩溃,没有理由代码映射到值19.所有SSL错误原因代码都从100开始。因此,ERR_reason_error_string必须返回NULL,这会导致代码崩溃。