openssl tlsv1 SSL_write发送奇数额外数据

openssl tlsv1 SSL_write发送奇数额外数据,openssl,Openssl,我的SSL_write()有问题。当我调用它时,它会在我之前发送额外的加密数据,并将其保存在单独的tls数据包中。它由32个字节组成。我对openssl代码进行了一些修补,以便在加密之前转储此数据,并发现它的实际大小为0x15字节和0x0b字节的填充。这些0x15字节似乎毫无意义。但我不明白是什么原因造成的?这是我的代码: int sock,s; BIO *sbio; SSL_CTX *ctx; SSL *ssl; int ret; const SSL_METHOD *meth; SSL_CTX

我的SSL_write()有问题。当我调用它时,它会在我之前发送额外的加密数据,并将其保存在单独的tls数据包中。它由32个字节组成。我对openssl代码进行了一些修补,以便在加密之前转储此数据,并发现它的实际大小为0x15字节和0x0b字节的填充。这些0x15字节似乎毫无意义。但我不明白是什么原因造成的?这是我的代码:

int sock,s;
BIO *sbio;
SSL_CTX *ctx;
SSL *ssl;
int ret;
const SSL_METHOD *meth;
SSL_CTX *ctx;

/* Global system initialization*/
SSL_library_init ();
SSL_load_error_strings ();
meth = TLSv1_server_method ();
ctx = SSL_CTX_new (meth);
SSL_CTX_set_default_passwd_cb(ctx, ppcb);
ret = SSL_CTX_use_certificate_file(ctx, "server_cert.pem", SSL_FILETYPE_PEM);
ret = SSL_CTX_use_PrivateKey_file (ctx, "server_key.pem", SSL_FILETYPE_PEM);

/*sock is accepted connection*/
sbio = BIO_new_socket (sock, BIO_NOCLOSE);
ssl = SSL_new(ctx);
SSL_set_bio (ssl, sbio, sbio);
ret = SSL_set_cipher_list(ssl, "TLSv1");
ret = SSL_accept (ssl);

char buf[BUFSIZE];
/*preparing buffer*/
r = SSL_write (ssl, buf, len);

我认为它在发送数据之前试图刷新缓冲区。但它是空的,因此数据包包含0x14字节的空缓冲区哈希和0x0c字节的填充(很抱歉上面的描述中出现了错误的数字-输出中有错误)。在搜索时,我在ssl.h中访问了一些选项列表,并试图设置:
SSL\u set\u选项(SSL、SSL\u OP\u不插入\u空\u片段)
所以,它解决了我的问题,但我仍然不知道在我的数据之前发送空片段的原因