1

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);
4

1 に答える 1

0

データを送信する前にバッファをフラッシュしようとしたと思いました。しかし、それは空なので、パケットには空のバッファの 0x14 バイトのハッシュと 0x0c バイトのパディングが含まれていました (上記の説明の数字が間違っていて申し訳ありません - 出力に誤りがありました)。検索中にssl.hのいくつかのオプションリストに出くわし、設定しようとしました: SSL_set_options(ssl, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS); それで問題は解決しましたが、データの前に空のフラグメントを送信する理由はまだわかりません。

于 2013-08-21T06:24:24.153 に答える