我想将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套接字发送数据,那么我的请求是未加密的,但服务器响应加密数据。
所以看起来服务器端的握手是成功的,因为服务器知道,我想要加密通信,但是我的一方都不知道。