mirror of https://github.com/wolfSSL/wolfssl.git
Merge pull request #6446 from JacobBarthelmeh/session
commit
90a6a14878
|
@ -34412,14 +34412,13 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
|||
ssl->options.resuming = 0;
|
||||
return ret;
|
||||
}
|
||||
#if defined(HAVE_SESSION_TICKET) && !defined(WOLFSSL_NO_TICKET_EXPIRE) && \
|
||||
!defined(NO_ASN_TIME)
|
||||
#if !defined(WOLFSSL_NO_TICKET_EXPIRE) && !defined(NO_ASN_TIME)
|
||||
/* check if the ticket is valid */
|
||||
if (LowResTimer() > session->bornOn + ssl->timeout) {
|
||||
WOLFSSL_MSG("Expired session ticket, fall back to full handshake.");
|
||||
WOLFSSL_MSG("Expired session, fall back to full handshake.");
|
||||
ssl->options.resuming = 0;
|
||||
}
|
||||
#endif /* HAVE_SESSION_TICKET && !WOLFSSL_NO_TICKET_EXPIRE && !NO_ASN_TIME */
|
||||
#endif /* !WOLFSSL_NO_TICKET_EXPIRE && !NO_ASN_TIME */
|
||||
|
||||
else if (session->haveEMS != ssl->options.haveEMS) {
|
||||
/* RFC 7627, 5.3, server-side */
|
||||
|
|
|
@ -13759,7 +13759,6 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output)
|
|||
TlsSessionCacheUnlockRow(row);
|
||||
error = WOLFSSL_FAILURE;
|
||||
}
|
||||
#if defined(WOLFSSL_TLS13) && defined(HAVE_SESSION_TICKET)
|
||||
else if (LowResTimer() >= (sess->bornOn + sess->timeout)) {
|
||||
WOLFSSL_SESSION* wrSess = NULL;
|
||||
WOLFSSL_MSG("Invalid session: timed out");
|
||||
|
@ -13774,7 +13773,6 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output)
|
|||
}
|
||||
error = WOLFSSL_FAILURE;
|
||||
}
|
||||
#endif /* HAVE_SESSION_TICKET && WOLFSSL_TLS13 */
|
||||
}
|
||||
|
||||
/* mollify confused cppcheck nullPointer warning. */
|
||||
|
|
128
tests/api.c
128
tests/api.c
|
@ -41431,6 +41431,133 @@ static int test_wolfSSL_SESSION(void)
|
|||
return EXPECT_RESULT();
|
||||
}
|
||||
|
||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS) && \
|
||||
!defined(NO_RSA) && defined(HAVE_IO_TESTS_DEPENDENCIES) && \
|
||||
!defined(NO_SESSION_CACHE) && defined(OPENSSL_EXTRA) && \
|
||||
!defined(WOLFSSL_NO_TLS12)
|
||||
static WOLFSSL_SESSION* test_wolfSSL_SESSION_expire_sess = NULL;
|
||||
|
||||
static void test_wolfSSL_SESSION_expire_downgrade_ctx_ready(WOLFSSL_CTX* ctx)
|
||||
{
|
||||
#ifdef WOLFSSL_ERROR_CODE_OPENSSL
|
||||
/* returns previous timeout value */
|
||||
AssertIntEQ(wolfSSL_CTX_set_timeout(ctx, 1), 500);
|
||||
#else
|
||||
AssertIntEQ(wolfSSL_CTX_set_timeout(ctx, 1), WOLFSSL_SUCCESS);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* set the session to timeout in a second */
|
||||
static void test_wolfSSL_SESSION_expire_downgrade_ssl_ready(WOLFSSL* ssl)
|
||||
{
|
||||
AssertIntEQ(wolfSSL_set_timeout(ssl, 2), 1);
|
||||
}
|
||||
|
||||
|
||||
/* store the client side session from the first successful connection */
|
||||
static void test_wolfSSL_SESSION_expire_downgrade_ssl_result(WOLFSSL* ssl)
|
||||
{
|
||||
AssertPtrNE((test_wolfSSL_SESSION_expire_sess = wolfSSL_get1_session(ssl)),
|
||||
NULL); /* ref count 1 */
|
||||
}
|
||||
|
||||
|
||||
/* wait till session is expired then set it in the WOLFSSL struct for use */
|
||||
static void test_wolfSSL_SESSION_expire_downgrade_ssl_ready_wait(WOLFSSL* ssl)
|
||||
{
|
||||
AssertIntEQ(wolfSSL_set_timeout(ssl, 1), 1);
|
||||
AssertIntEQ(wolfSSL_set_session(ssl, test_wolfSSL_SESSION_expire_sess),
|
||||
WOLFSSL_SUCCESS);
|
||||
XSLEEP_MS(2000); /* wait 2 seconds for session to expire */
|
||||
}
|
||||
|
||||
|
||||
/* set expired session in the WOLFSSL struct for use */
|
||||
static void test_wolfSSL_SESSION_expire_downgrade_ssl_ready_set(WOLFSSL* ssl)
|
||||
{
|
||||
XSLEEP_MS(1200); /* wait a second for session to expire */
|
||||
|
||||
/* set the expired session, call to set session fails but continuing on
|
||||
after failure should be handled here */
|
||||
#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_ERROR_CODE_OPENSSL)
|
||||
AssertIntEQ(wolfSSL_set_session(ssl, test_wolfSSL_SESSION_expire_sess),
|
||||
WOLFSSL_SUCCESS);
|
||||
#else
|
||||
AssertIntNE(wolfSSL_set_session(ssl, test_wolfSSL_SESSION_expire_sess),
|
||||
WOLFSSL_SUCCESS);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* check that the expired session was not reused */
|
||||
static void test_wolfSSL_SESSION_expire_downgrade_ssl_result_reuse(WOLFSSL* ssl)
|
||||
{
|
||||
/* since the session has expired it should not have been reused */
|
||||
AssertIntEQ(wolfSSL_session_reused(ssl), 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int test_wolfSSL_SESSION_expire_downgrade(void)
|
||||
{
|
||||
EXPECT_DECLS;
|
||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS) && \
|
||||
!defined(NO_RSA) && defined(HAVE_IO_TESTS_DEPENDENCIES) && \
|
||||
!defined(NO_SESSION_CACHE) && defined(OPENSSL_EXTRA) && \
|
||||
!defined(WOLFSSL_NO_TLS12)
|
||||
|
||||
WOLFSSL_CTX* ctx = NULL;
|
||||
callback_functions server_cbf, client_cbf;
|
||||
|
||||
XMEMSET(&server_cbf, 0, sizeof(callback_functions));
|
||||
XMEMSET(&client_cbf, 0, sizeof(callback_functions));
|
||||
|
||||
/* force server side to use TLS 1.2 */
|
||||
server_cbf.ctx = ctx;
|
||||
server_cbf.method = wolfTLSv1_2_server_method;
|
||||
|
||||
client_cbf.method = wolfSSLv23_client_method;
|
||||
server_cbf.ctx_ready = test_wolfSSL_SESSION_expire_downgrade_ctx_ready;
|
||||
client_cbf.ssl_ready = test_wolfSSL_SESSION_expire_downgrade_ssl_ready;
|
||||
client_cbf.on_result = test_wolfSSL_SESSION_expire_downgrade_ssl_result;
|
||||
|
||||
test_wolfSSL_client_server_nofail(&client_cbf, &server_cbf);
|
||||
ExpectIntEQ(client_cbf.return_code, TEST_SUCCESS);
|
||||
ExpectIntEQ(server_cbf.return_code, TEST_SUCCESS);
|
||||
|
||||
/* set the previously created session and wait till expired */
|
||||
server_cbf.ctx = ctx;
|
||||
|
||||
client_cbf.method = wolfSSLv23_client_method;
|
||||
server_cbf.ctx_ready = test_wolfSSL_SESSION_expire_downgrade_ctx_ready;
|
||||
client_cbf.ssl_ready = test_wolfSSL_SESSION_expire_downgrade_ssl_ready_wait;
|
||||
client_cbf.on_result =
|
||||
test_wolfSSL_SESSION_expire_downgrade_ssl_result_reuse;
|
||||
|
||||
test_wolfSSL_client_server_nofail(&client_cbf, &server_cbf);
|
||||
ExpectIntEQ(client_cbf.return_code, TEST_SUCCESS);
|
||||
ExpectIntEQ(server_cbf.return_code, TEST_SUCCESS);
|
||||
|
||||
/* set the previously created expired session */
|
||||
server_cbf.ctx = ctx;
|
||||
|
||||
client_cbf.method = wolfSSLv23_client_method;
|
||||
server_cbf.ctx_ready = test_wolfSSL_SESSION_expire_downgrade_ctx_ready;
|
||||
client_cbf.ssl_ready = test_wolfSSL_SESSION_expire_downgrade_ssl_ready_set;
|
||||
client_cbf.on_result =
|
||||
test_wolfSSL_SESSION_expire_downgrade_ssl_result_reuse;
|
||||
|
||||
test_wolfSSL_client_server_nofail(&client_cbf, &server_cbf);
|
||||
ExpectIntEQ(client_cbf.return_code, TEST_SUCCESS);
|
||||
ExpectIntEQ(server_cbf.return_code, TEST_SUCCESS);
|
||||
|
||||
wolfSSL_SESSION_free(test_wolfSSL_SESSION_expire_sess);
|
||||
wolfSSL_CTX_free(ctx);
|
||||
|
||||
#endif
|
||||
return EXPECT_RESULT();
|
||||
}
|
||||
|
||||
#if defined(OPENSSL_EXTRA) && defined(HAVE_SSL_MEMIO_TESTS_DEPENDENCIES) && \
|
||||
defined(HAVE_EX_DATA) && !defined(NO_SESSION_CACHE)
|
||||
static int clientSessRemCountMalloc = 0;
|
||||
|
@ -64191,6 +64318,7 @@ TEST_CASE testCases[] = {
|
|||
TEST_DECL(test_wolfSSL_cert_cb),
|
||||
/* Can't memory test as tcp_connect aborts. */
|
||||
TEST_DECL(test_wolfSSL_SESSION),
|
||||
TEST_DECL(test_wolfSSL_SESSION_expire_downgrade),
|
||||
TEST_DECL(test_wolfSSL_CTX_sess_set_remove_cb),
|
||||
TEST_DECL(test_wolfSSL_ticket_keys),
|
||||
TEST_DECL(test_wolfSSL_sk_GENERAL_NAME),
|
||||
|
|
Loading…
Reference in New Issue