SSL_CTX_new返回NULL后获取错误描述的问题

use*_*637 7 c++ ssl openssl ssl-certificate

我对SSL很新,其实我会说我一无所知.

我使用方法"SSL_CTX_new"来创建SSL_CTX对象.该方法返回null.文档说我可以检查错误堆栈以获得原因.

所以我有函数"int SSL_get_error(SSL*s,int ret_code)"(据我所知),我必须使用它来获取错误消息.该方法的文档没有说明该函数的第一个参数.它只表示第二个("ret")参数应该等于失败操作的返回码,该操作可以是以下任何一个:

SSL_connect(),SSL_accept(),SSL_do_handshake(),SSL_read(),SSL_peek()或SSL_write()

所以现在我有两个问题.第一,我没有使用任何的这些功能,而是使用SSL_CTX_new不返回任何类型的返回代码(它返回一个指向SSX_CTX对象),所以我不知道该用什么作为了"RET"参数.第二个问题是我不知道第一个参数意味着什么,我应该把它放在那里,因为文档没有说明它.

Jay*_*lor 8

根据http://www.mail-archive.com/openssl-users@openssl.org/msg51543.html,您可能错过了一个电话SSL_library_init().在SSL_CTX_NEW(..)调用之前添加此项为我修复了NULL值问题.


Gle*_*len 7

您需要一个有效的上下文来创建SSL对象.

由于无法创建上下文,因此无法使用SSL_get_error.

尝试使用ERR_print_errors来查看出错的地方

#include "openssl/err.h"
...

SSL_CTX * ctx = SSL_CTX_new(....);
if(!ctx) {
    ERR_print_errors_fp(stderr);
    //throw or return an error 
}
Run Code Online (Sandbox Code Playgroud)

我刚刚阅读了SSL文档.如果需要以编程方式获取错误代码/错误字符串,则应使用ERR_get_error和ERR_error_string函数.

看看这里这里