Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SSL_CTX_new返回NULL后获取错误描述时出现问题_C++_Ssl_Openssl_Ssl Certificate - Fatal编程技术网

C++ SSL_CTX_new返回NULL后获取错误描述时出现问题

C++ SSL_CTX_new返回NULL后获取错误描述时出现问题,c++,ssl,openssl,ssl-certificate,C++,Ssl,Openssl,Ssl Certificate,我对SSL非常陌生,实际上我会说我对它一无所知 我正在使用“SSL_CTX_new”方法创建一个SSL_CTX对象。该方法返回null。文档中说我可以检查错误堆栈,以便找到原因 因此,我有一个函数“int-SSL\u-get\u-error(SSL*s,int-ret\u-code)”,据我所知,为了获取错误消息,我必须使用这个函数。该方法的文档中没有提到函数的第一个参数。它只表示第二个(“ret”)参数应等于失败操作的返回码,该返回码可以是以下任意一种: SSL_connect()、SSL_a

我对SSL非常陌生,实际上我会说我对它一无所知

我正在使用“SSL_CTX_new”方法创建一个SSL_CTX对象。该方法返回null。文档中说我可以检查错误堆栈,以便找到原因

因此,我有一个函数“int-SSL\u-get\u-error(SSL*s,int-ret\u-code)”,据我所知,为了获取错误消息,我必须使用这个函数。该方法的文档中没有提到函数的第一个参数。它只表示第二个(“ret”)参数应等于失败操作的返回码,该返回码可以是以下任意一种:

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


所以现在我有两个问题。首先,我没有使用任何这些函数,而是使用SSL_CTX_new,它不返回任何类型的返回代码(它返回指向SSX_CTX对象的指针),因此我不知道将什么作为“ret”参数。第二个问题是,我不知道第一个参数是什么意思,我应该在那里放什么,因为doc没有提到它。

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

由于无法创建上下文,因此无法使用SSL\u get\u错误

尝试使用ERR\u print\u errors查看出现了什么问题

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

SSL_CTX * ctx = SSL_CTX_new(....);
if(!ctx) {
    ERR_print_errors_fp(stderr);
    //throw or return an error 
}
我刚刚阅读了SSL文档。如果需要以编程方式获取错误代码/错误字符串,则应使用ERR_get_error和ERR_error_string函数


查看一下,根据,您可能缺少对SSL\u library\u init()的调用。在SSL_CTX_NEW(..)调用之前添加此选项为我解决了空值问题。

能否显示一些调用SSL_CTX_NEW的代码?感谢@Jay Taylor,您节省了时间即使缺少init调用是问题所在,此答案也无法解决实际问题,即如何获取错误消息。还可以向人们指出如何使用
ERR\u get\u error
(3)和朋友。