【发布时间】:2016-11-19 18:29:22
【问题描述】:
我有这个简单的程序:
int main ()
{
/* INITIALIZING OPENSSL */
SSL_library_init();
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
BIO *bio;
connectServerSSL(bio);
login(bio);
}
还有这个功能:
void connectServerSSL (BIO *bio)
{
SSL_CTX * ctx = SSL_CTX_new(SSLv23_client_method());
SSL * ssl;
if(! SSL_CTX_load_verify_locations(ctx, NULL, "/etc/ssl/certs"))
{
callError(ERR_LOADCERT);
}
bio = BIO_new_ssl_connect(ctx);
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
BIO_set_conn_hostname(bio, hostnamePort);
if(BIO_do_connect(bio) <= 0)
{
callError(ERR_CONNECTION);
}
if(SSL_get_verify_result(ssl) != X509_V_OK)
{
callError(ERR_VALIDCERT);
}
}
当我使用这个时:
BIO_write(bio, request.c_str(), request.size())
在函数 connectServerSSL 中它工作正常。
但是当我想在其他功能中使用它时:
void login (BIO *bio)
{
BIO_write(bio, request.c_str(), request.size());
}
我得到分段错误(核心转储)。
【问题讨论】:
-
你没有从
connectServerSSL返回你的bio。 -
请问我该怎么做?
标签: c++ openssl segmentation-fault