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

标签 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”范围。第二个问题是我不知道第一个参数是什么意思以及我应该放在那里什么,因为文档对此没有任何说明。

最佳答案

您需要一个有效的上下文来创建 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 
}

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

看看herehere

关于c++ - SSL_CTX_new 返回 NULL 后获取错误描述的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/907302/

相关文章:

c++ - header 中结构数组的链接器错误

c++ - 从 C++ 中的列表中删除元素

ios - 使用 bonjour 的安全连接

openssl - 使用 OpenSSL 创建 .pfx 文件

c++ - 使用相同引擎并行生成随机数失败

c++ - 如何正确使用wxID_OK和wxID_CANCEL?

c++ - asio set_password_callback() 方法是什么?

java - 为什么我的客户端在使用 SSL 套接字和 Java 7 时无法读取服务器发送的第二条消息?

c++ - 如何确定阻塞的 SSL BIO 连接是否已关闭?

python 请求 SSL 错误(证书验证失败)