1

我遇到了 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);
4

1 回答 1

0

我认为它在发送我的数据之前尝试刷新缓冲区。但它是空的,所以数据包包含 0x14 字节的空缓冲区哈希和 0x0c 字节的填充(对不起,上面描述中的数字错误 - 输出有误)。在搜索时,我遇到了 ssl.h 中的一些选项列表并尝试设置: SSL_set_options(ssl, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS); 所以,它解决了我的问题,但我仍然不知道在我的数据之前发送空片段的原因。

于 2013-08-21T06:24:24.153 回答