C ++ BIO_do_handshake失败,但SSL_connect有效

时间:2016-10-21 19:19:58

标签: c++ sockets openssl

我想将TCP套接字转换为BIO套接字,因此我初始化了OpenSSL库(SSL_library_init(); SSL_load_error_strings();等),然后创建变量并连接它。

// .. initialize library
SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method());
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
SSL_CTX_load_verify_locations(ctx, "server.crt", NULL);
SSL *ssl = SSL_new(ctx);
BIO *bio = BIO_new_socket(socket, BIO_NOCLOSE);   // socket is TCP socket
SSL_set_bio(ssl, bio, bio);
BIO_do_handshake(bio);                 // returns 0 -> connection could not be established

我已经使用SSL_connect(ssl)尝试了此操作,然后使用SSL_write / SSL_read进行了写/读并且它有效,但我希望使用BIO_read / BIO_write和正如我所说 - BIO_do_handshake失败,如果我仍然尝试通过BIO套接字发送数据,那么我的请求是未加密的,但服务器响应加密数据。

所以看起来服务器端的握手是成功的,因为服务器知道,我想要加密通信,但是我的一方都不知道。

0 个答案:

没有答案