提交 4f9fab6b 编写于 作者: M Matt Caswell

Add ticket length before buffering DTLS message

In ssl3_send_new_session_ticket the message to be sent is constructed. We
skip adding the length of the session ticket initially, then call
ssl_set_handshake_header, and finally go back and add in the length of the
ticket. Unfortunately, in DTLS, ssl_set_handshake_header also has the side
effect of buffering the message for subsequent retransmission if required.
By adding the ticket length after the call to ssl_set_handshake_header the
message that is buffered is incomplete, causing an invalid message to be
sent on retransmission.
Reviewed-by: NRichard Levitte <levitte@openssl.org>
上级 d5d0a1cb
...@@ -3431,11 +3431,11 @@ int ssl3_send_newsession_ticket(SSL *s) ...@@ -3431,11 +3431,11 @@ int ssl3_send_newsession_ticket(SSL *s)
/* Now write out lengths: p points to end of data written */ /* Now write out lengths: p points to end of data written */
/* Total length */ /* Total length */
len = p - ssl_handshake_start(s); len = p - ssl_handshake_start(s);
if(!ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len))
goto err;
/* Skip ticket lifetime hint */ /* Skip ticket lifetime hint */
p = ssl_handshake_start(s) + 4; p = ssl_handshake_start(s) + 4;
s2n(len - 6, p); s2n(len - 6, p);
if(!ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len))
goto err;
s->state = SSL3_ST_SW_SESSION_TICKET_B; s->state = SSL3_ST_SW_SESSION_TICKET_B;
OPENSSL_free(senc); OPENSSL_free(senc);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册