The client always starts timer for the retransmission of the ChangeCipherSpec and Finished, although that is only correct when performing a full handshake. With the abbreviated session resumption handshake, these messages are not followed by a response of the server, so the timer is never stopped and causes retransmissions until the connection is dropped. This patch adds the distinction between full and abbreviated handshakes and prevents the timer from being started in the latter case.
Best regards
Robin
--- ssl/d1_clnt.c 27 Aug 2010 12:10:11 -0000 1.16.2.15.2.3
+++ ssl/d1_clnt.c 27 Apr 2011 12:27:50 -0000
@@ -407,7 +407,8 @@
case SSL3_ST_CW_CHANGE_A:
case SSL3_ST_CW_CHANGE_B:
- dtls1_start_timer(s);
+ if (!s->hit)
+ dtls1_start_timer(s);
ret=dtls1_send_change_cipher_spec(s,
SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
if (ret <= 0) goto end;
@@ -442,7 +443,8 @@
case SSL3_ST_CW_FINISHED_A:
case SSL3_ST_CW_FINISHED_B:
- dtls1_start_timer(s);
+ if (!s->hit)
+ dtls1_start_timer(s);
ret=dtls1_send_finished(s,
SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B,
s->method->ssl3_enc->client_finished_label,
dtls-session-resumption-timer-bug-0.9.8.patch
Description: Binary data
dtls-session-resumption-timer-bug-1.0.0.patch
Description: Binary data
dtls-session-resumption-timer-bug-1.0.1.patch
Description: Binary data
