1

在 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);,程序会崩溃。我究竟做错了什么?

4

1 回答 1

2

请使用函数X509_verify_cert_error_string获取与 OpenSSL 中的证书验证相关的错误。ERR_error_string 为其他 SSL lib 相关错误而不是证书验证失败特定错误提供错误字符串。

至于崩溃,没有原因代码映射到值 19。所有 SSL 错误原因代码都从 100 开始。因此,ERR_reason_error_string 必须返回 NULL,这会导致您的代码崩溃。

于 2012-07-12T08:10:02.950 回答