OpenSSL API 在使用 SSL_get_certificate() 时崩溃
OpenSSL API's crashing while using SSL_get_certificate()
以下命令打印所述主机的SHA1指纹
openssl s_client-连接主机名:端口|openssl x509-指纹-nout
为了使用c++完成相同的操作,我使用ssl API
#include"openssl/ssl.h"
#include"openssl/bio.h"
#include "openssl/err.h"
#include<iostream>
using namespace std;
int main()
{
SSL_CTX * ctx = SSL_CTX_new(SSLv23_client_method());
SSL * ssl;
BIO * bio;
SSL_library_init();
bio = BIO_new_ssl_connect(ctx);
BIO_set_conn_hostname(bio, "hostname:port");//Correct hostname and port is used
if(BIO_do_connect(bio) <= 0)
{
cout << "success";
}
BIO_get_ssl(bio, & ssl);
X509 *x509 = NULL;
x509 = SSL_get_certificate( ssl );//Crashing point
return 1;
}
中的应用程序崩溃
x509=SSL_get_certificate(SSL);
知道它为什么会崩溃吗?
从手册页报价:
BIO_do_connect()尝试连接提供的BIO。如果连接成功,则返回1。如果无法建立连接,则返回零值或负值,。。。
但是,您的代码会检查零值或负值,然后错误地打印"success"并继续。因此,BIO_get_ssl(bio, & ssl);
很可能会失败,并使ssl
指向NULL
,从而导致下一行崩溃。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 将方法转换为调用该方法的成员函子对象会导致崩溃