C 关于用法的Openssl查询
我正在尝试在我的应用程序中使用OpenSSL,并实现安全连接 起初我试着:C 关于用法的Openssl查询,c,openssl,C,Openssl,我正在尝试在我的应用程序中使用OpenSSL,并实现安全连接 起初我试着: 创建ssl结构 为tcp套接字创建socketbio 创建sslbio 将socketbio设置为SSL struct SSL\u接受(SSL) BIO\u推送(ssl、socketbio) 这会导致握手成功,但应用程序数据未正确解密 然后我稍微调整了一下,然后用6秒的速度放松 (new) BIO_ctrl(sslbio, SET_SSL, ssl) 事情进展顺利 我想知道,以前的方法有什么问题,是什么导致了新方法的工
SSL\u接受(SSL)
BIO\u推送(ssl、socketbio)
(new) BIO_ctrl(sslbio, SET_SSL, ssl)
事情进展顺利
我想知道,以前的方法有什么问题,是什么导致了新方法的工作?如果不知道为什么你认为
BIO\u push
就是你需要做的一切,那么很难回答这个问题。无论如何,你不应该直接调用BIO\u ctrl
。您应该使用BIO.h
中定义的高级包装BIO\u set\u ssl
:
#define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl)
此宏设置BIO对象的ssl成员,如您在BIO_ssl.c
中所见:
case BIO_C_SET_SSL:
if (ssl != NULL)
ssl_free(b);
b->shutdown=(int)num;
ssl=(SSL *)ptr;
((BIO_SSL *)b->ptr)->ssl=ssl;
bio=SSL_get_rbio(ssl);
if (bio != NULL)
{
if (b->next_bio != NULL)
BIO_push(bio,b->next_bio);
b->next_bio=bio;
CRYPTO_add(&bio->references,1,CRYPTO_LOCK_BIO);
}
b->init=1;
break;
此函数中的重要步骤不是
BIO_push
,而是将BIO_ssl
对象中的ssl指针设置为活动ssl上下文,即((BIO_ssl*)b->ptr)->ssl=ssl
如果不知道你为什么认为BIO_push就是你所需要做的一切,就很难回答这个问题。无论如何,你不应该直接调用BIO\u ctrl
。您应该使用BIO.h
中定义的高级包装BIO\u set\u ssl
:
#define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl)
此宏设置BIO对象的ssl成员,如您在BIO_ssl.c
中所见:
case BIO_C_SET_SSL:
if (ssl != NULL)
ssl_free(b);
b->shutdown=(int)num;
ssl=(SSL *)ptr;
((BIO_SSL *)b->ptr)->ssl=ssl;
bio=SSL_get_rbio(ssl);
if (bio != NULL)
{
if (b->next_bio != NULL)
BIO_push(bio,b->next_bio);
b->next_bio=bio;
CRYPTO_add(&bio->references,1,CRYPTO_LOCK_BIO);
}
b->init=1;
break;
此函数中的重要步骤不是
BIO_push
,而是将BIO_ssl
对象中的ssl指针设置为活动ssl上下文,即((BIO_ssl*)b->ptr)->ssl=ssl代码>请配合进行解释。是的,我不使用ctrl-direct;y,但请按照上面提到的设置_ssl.thnx mate进行解释。是的,我不使用ctrl-direct;y,但按照上面提到的设置_ssl。