From 4f77ecf40957aca1ad8519b5ccf05caf4043b8bc Mon Sep 17 00:00:00 2001 From: Jerry Yu Date: Mon, 10 Oct 2022 22:10:08 +0800 Subject: [PATCH] disable session resumption when ticket expired Signed-off-by: Jerry Yu --- library/ssl_client.c | 51 ++++++++++++++++++-------------------- library/ssl_tls13_client.c | 3 ++- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/library/ssl_client.c b/library/ssl_client.c index 73a854d61b..2ed6ce6853 100644 --- a/library/ssl_client.c +++ b/library/ssl_client.c @@ -720,6 +720,30 @@ static int ssl_prepare_client_hello( mbedtls_ssl_context *ssl ) int ret; size_t session_id_len; +#if defined(MBEDTLS_SSL_PROTO_TLS1_3) && \ + defined(MBEDTLS_SSL_SESSION_TICKETS) && \ + defined(MBEDTLS_HAVE_TIME) + /* Check if a tls13 ticket has been configured. */ + if( ssl->session_negotiate->tls_version == MBEDTLS_SSL_VERSION_TLS1_3 && + ssl->handshake->resume != 0 && + ssl->session_negotiate != NULL && + ssl->session_negotiate->ticket != NULL ) + { + mbedtls_time_t now = mbedtls_time( NULL ); + if( ssl->session_negotiate->ticket_received > now || + (uint64_t)( now - ssl->session_negotiate->ticket_received ) + > ssl->session_negotiate->ticket_lifetime ) + { + /* Without valid ticket, disable session resumption.*/ + MBEDTLS_SSL_DEBUG_MSG( + 3, ( "Ticket expired, disable session resumption" ) ); + ssl->handshake->resume = 0; + } + } +#endif /* MBEDTLS_SSL_PROTO_TLS1_3 && + MBEDTLS_SSL_SESSION_TICKETS && + MBEDTLS_HAVE_TIME */ + if( ssl->conf->f_rng == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no RNG provided" ) ); @@ -843,33 +867,6 @@ static int ssl_prepare_client_hello( mbedtls_ssl_context *ssl ) } } -#if defined(MBEDTLS_SSL_PROTO_TLS1_3) && \ - defined(MBEDTLS_SSL_SESSION_TICKETS) && \ - defined(MBEDTLS_HAVE_TIME) - /* Check if a tls13 ticket has been configured. */ - if( ssl->session_negotiate->tls_version == MBEDTLS_SSL_VERSION_TLS1_3 && - ssl->handshake->resume != 0 && - ssl->session_negotiate != NULL && - ssl->session_negotiate->ticket != NULL ) - { - mbedtls_time_t now = mbedtls_time( NULL ); - if( ssl->session_negotiate->ticket_received > now || - (uint64_t)( now - ssl->session_negotiate->ticket_received ) - > ssl->session_negotiate->ticket_lifetime ) - { - MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket expired" ) ); - mbedtls_platform_zeroize( ssl->session_negotiate->ticket, - ssl->session_negotiate->ticket_len ); - mbedtls_free( ssl->session_negotiate->ticket ); - ssl->session_negotiate->ticket = NULL; - ssl->session_negotiate->ticket_len = 0; - } - - } -#endif /* MBEDTLS_SSL_PROTO_TLS1_3 && - MBEDTLS_SSL_SESSION_TICKETS && - MBEDTLS_HAVE_TIME */ - return( 0 ); } diff --git a/library/ssl_tls13_client.c b/library/ssl_tls13_client.c index ee4c24d213..6227f3d0b0 100644 --- a/library/ssl_tls13_client.c +++ b/library/ssl_tls13_client.c @@ -681,7 +681,8 @@ static psa_algorithm_t ssl_tls13_get_ciphersuite_hash_alg( int ciphersuite ) static int ssl_tls13_has_configured_ticket( mbedtls_ssl_context *ssl ) { mbedtls_ssl_session *session = ssl->session_negotiate; - return( session != NULL && session->ticket != NULL ); + return( ssl->handshake->resume && + session != NULL && session->ticket != NULL ); } MBEDTLS_CHECK_RETURN_CRITICAL