diff --git a/library/ssl_tls.c b/library/ssl_tls.c index de85b676cb..e72aa3ea29 100644 --- a/library/ssl_tls.c +++ b/library/ssl_tls.c @@ -2753,8 +2753,10 @@ static int ssl_prepare_handshake_record( ssl_context *ssl ) if( ssl->handshake != NULL && recv_msg_seq != ssl->handshake->in_msg_seq ) { - /* No sane server ever retransmits HelloVerifyRequest */ - if( recv_msg_seq < ssl->handshake->in_flight_start_seq && + /* Retransmit only on last message from previous flight, to avoid + * too many retransmissions. + * Besides, No sane server ever retransmits HelloVerifyRequest */ + if( recv_msg_seq == ssl->handshake->in_flight_start_seq - 1 && ssl->in_msg[0] != SSL_HS_HELLO_VERIFY_REQUEST ) { SSL_DEBUG_MSG( 2, ( "received message from last flight, "