Skip to content

Commit

Permalink
Add SSLSessionTickets (on|off).
Browse files Browse the repository at this point in the history
It controls the use of TLS session tickets
(RFC 5077). Default is unchanged (on).

Using session tickets without restarting
the web server with an appropriate frequency
(e.g. daily) compromises perfect forward
secrecy.

As long as we do not have a nice key management
there should be a way to deactivate session
tickets.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1650310 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Rainer Jung committed Jan 8, 2015
1 parent 8aee281 commit 1a9e61d
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 0 deletions.
21 changes: 21 additions & 0 deletions docs/manual/mod/mod_ssl.xml
Expand Up @@ -2589,6 +2589,27 @@ CRIME attack).</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>SSLSessionTickets</name>
<description>Enable or disable use of TLS session tickets</description>
<syntax>SSLSessionTickets on|off</syntax>
<default>SSLCompression on</default>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<compatibility>Available in httpd 2.4.11 and later, if using OpenSSL 0.9.8f
or later.</compatibility>

<usage>
<p>This directive allows to enable or disable the use of TLS session tickets
(RFC 5077).</p>
<note type="warning">
<p>TLS session tickets are enabled by default. Using them without restarting
the web server with an appropriate frequency (e.g. daily) compromises perfect
forward secrecy.</p>
</note>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>SSLOpenSSLConfCmd</name>
<description>Configure OpenSSL parameters through its <em>SSL_CONF</em> API</description>
Expand Down
3 changes: 3 additions & 0 deletions modules/ssl/mod_ssl.c
Expand Up @@ -148,6 +148,9 @@ static const command_rec ssl_config_cmds[] = {
SSL_CMD_SRV(Compression, FLAG,
"Enable SSL level compression "
"(`on', `off')")
SSL_CMD_SRV(SessionTickets, FLAG,
"Enable or disable TLS session tickets"
"(`on', `off')")
SSL_CMD_SRV(InsecureRenegotiation, FLAG,
"Enable support for insecure renegotiation")
SSL_CMD_ALL(UserName, TAKE1,
Expand Down
13 changes: 13 additions & 0 deletions modules/ssl/ssl_engine_config.c
Expand Up @@ -222,6 +222,7 @@ static SSLSrvConfigRec *ssl_config_server_new(apr_pool_t *p)
#ifndef OPENSSL_NO_COMP
sc->compression = UNSET;
#endif
sc->session_tickets = UNSET;

modssl_ctx_init_proxy(sc, p);

Expand Down Expand Up @@ -356,6 +357,7 @@ void *ssl_config_server_merge(apr_pool_t *p, void *basev, void *addv)
#ifndef OPENSSL_NO_COMP
cfgMergeBool(compression);
#endif
cfgMergeBool(session_tickets);

modssl_ctx_cfg_merge_proxy(p, base->proxy, add->proxy, mrg->proxy);

Expand Down Expand Up @@ -733,6 +735,17 @@ const char *ssl_cmd_SSLHonorCipherOrder(cmd_parms *cmd, void *dcfg, int flag)
#endif
}

const char *ssl_cmd_SSLSessionTickets(cmd_parms *cmd, void *dcfg, int flag)
{
SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
#ifndef SSL_OP_NO_TICKET
return "This version of OpenSSL does not support using "
"SSLSessionTickets.";
#endif
sc->session_tickets = flag ? TRUE : FALSE;
return NULL;
}

const char *ssl_cmd_SSLInsecureRenegotiation(cmd_parms *cmd, void *dcfg, int flag)
{
#ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
Expand Down
10 changes: 10 additions & 0 deletions modules/ssl/ssl_engine_init.c
Expand Up @@ -574,6 +574,16 @@ static apr_status_t ssl_init_ctx_protocol(server_rec *s,
}
#endif

#ifdef SSL_OP_NO_TICKET
/*
* Configure using RFC 5077 TLS session tickets
* for session resumption.
*/
if (sc->session_tickets == FALSE) {
SSL_CTX_set_options(ctx, SSL_OP_NO_TICKET);
}
#endif

#ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
if (sc->insecure_reneg == TRUE) {
SSL_CTX_set_options(ctx, SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION);
Expand Down
2 changes: 2 additions & 0 deletions modules/ssl/ssl_private.h
Expand Up @@ -648,6 +648,7 @@ struct SSLSrvConfigRec {
#ifndef OPENSSL_NO_COMP
BOOL compression;
#endif
BOOL session_tickets;
};

/**
Expand Down Expand Up @@ -702,6 +703,7 @@ const char *ssl_cmd_SSLCARevocationFile(cmd_parms *, void *, const char *);
const char *ssl_cmd_SSLCARevocationCheck(cmd_parms *, void *, const char *);
const char *ssl_cmd_SSLHonorCipherOrder(cmd_parms *cmd, void *dcfg, int flag);
const char *ssl_cmd_SSLCompression(cmd_parms *, void *, int flag);
const char *ssl_cmd_SSLSessionTickets(cmd_parms *, void *, int flag);
const char *ssl_cmd_SSLVerifyClient(cmd_parms *, void *, const char *);
const char *ssl_cmd_SSLVerifyDepth(cmd_parms *, void *, const char *);
const char *ssl_cmd_SSLSessionCache(cmd_parms *, void *, const char *);
Expand Down

0 comments on commit 1a9e61d

Please sign in to comment.