我遇到了SSL_write()的问题。当我打电话给它时,它会在我单独的tls-packet之前发送额外的加密数据。它由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);
答案 0 :(得分:0)
我认为它在发送数据之前尝试刷新缓冲区。但是它是空的,所以数据包包含0x14字节的空缓冲区和0x0c字节的填充(对于上面的描述中的错误数字抱歉 - 输出中存在错误)。在搜索时我遇到了ssl.h中的一些选项列表,并尝试设置:
SSL_set_options(ssl, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS);
所以,它解决了我的问题,但我仍然不知道在我的数据之前发送空片段的原因。