app-layer-ssl: add support for session tickets

Add support for logging a session as 'resumed' when using a non-empty
session ticket extension in the client hello record.
pull/3478/head
Mats Klepsland 8 years ago
parent 21897a4d7a
commit e0ef578c46

@ -1018,6 +1018,20 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
break;
}
case SSL_EXTENSION_SESSION_TICKET:
{
if ((ssl_state->current_flags & SSL_AL_FLAG_STATE_CLIENT_HELLO) &&
ext_len != 0) {
/* This has to be verified later on by checking if a
certificate record has been sent by the server. */
ssl_state->flags |= SSL_AL_FLAG_SESSION_RESUMED;
}
input += ext_len;
break;
}
default:
{
input += ext_len;

@ -110,6 +110,7 @@ enum {
#define SSL_EXTENSION_SNI 0x0000
#define SSL_EXTENSION_ELLIPTIC_CURVES 0x000a
#define SSL_EXTENSION_EC_POINT_FORMATS 0x000b
#define SSL_EXTENSION_SESSION_TICKET 0x0023
/* SNI types */
#define SSL_SNI_TYPE_HOST_NAME 0

@ -490,7 +490,12 @@ static int LogTlsLogger(ThreadVars *tv, void *thread_data, const Packet *p,
ssl_state->server_connp.cert0_issuerdn);
}
if (ssl_state->flags & SSL_AL_FLAG_SESSION_RESUMED) {
MemBufferWriteString(aft->buffer, " Session='resumed'");
/* Only log a session as 'resumed' if a certificate has not
been seen. */
if ((ssl_state->server_connp.cert0_issuerdn == NULL) &&
(ssl_state->server_connp.cert0_subject == NULL)) {
MemBufferWriteString(aft->buffer, " Session='resumed'");
}
}
if (hlog->flags & LOG_TLS_EXTENDED) {

@ -133,7 +133,12 @@ static void JsonTlsLogIssuer(json_t *js, SSLState *ssl_state)
static void JsonTlsLogSessionResumed(json_t *js, SSLState *ssl_state)
{
if (ssl_state->flags & SSL_AL_FLAG_SESSION_RESUMED) {
json_object_set_new(js, "session_resumed", json_boolean(true));
/* Only log a session as 'resumed' if a certificate has not
been seen. */
if (ssl_state->server_connp.cert0_issuerdn == NULL &&
ssl_state->server_connp.cert0_subject == NULL) {
json_object_set_new(js, "session_resumed", json_boolean(true));
}
}
}

Loading…
Cancel
Save