Welcome! Log In Create A New Profile

Advanced

[PATCH] SSL: ssl_session_tickets directive

Dirkjan Bussink
January 10, 2014 10:24AM
# HG changeset patch
# User Dirkjan Bussink <d.bussink@gmail.com>
# Date 1389366760 -3600
# Node ID d049b0ea00a388c142627f10a0ee01c5b1bedc43
# Parent 4aa64f6950313311e0d322a2af1788edeb7f036c
SSL: ssl_session_tickets directive.

This adds support so it's possible to explicitly disable SSL Session
Tickets. In order to have good Forward Secrecy support either the
session ticket key has to be reloaded by using nginx' binary upgrade
process or using an external key file and reloading the configuration.
This directive adds another possibility to have good support by
disabling session tickets altogether.

If session tickets are enabled and the process lives for a long a time,
an attacker can grab the session ticket from the process and use that to
decrypt any traffic that occured during the entire lifetime of the
process.

diff -r 4aa64f695031 -r d049b0ea00a3 src/http/modules/ngx_http_ssl_module.c
--- a/src/http/modules/ngx_http_ssl_module.c Sat Jan 04 03:32:22 2014 +0400
+++ b/src/http/modules/ngx_http_ssl_module.c Fri Jan 10 16:12:40 2014 +0100
@@ -160,6 +160,13 @@
0,
NULL },

+ { ngx_string("ssl_session_tickets"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_SRV_CONF_OFFSET,
+ offsetof(ngx_http_ssl_srv_conf_t, session_tickets),
+ NULL },
+
{ ngx_string("ssl_session_ticket_key"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
ngx_conf_set_str_array_slot,
@@ -436,6 +443,7 @@
sscf->verify_depth = NGX_CONF_UNSET_UINT;
sscf->builtin_session_cache = NGX_CONF_UNSET;
sscf->session_timeout = NGX_CONF_UNSET;
+ sscf->session_tickets = NGX_CONF_UNSET;
sscf->session_ticket_keys = NGX_CONF_UNSET_PTR;
sscf->stapling = NGX_CONF_UNSET;
sscf->stapling_verify = NGX_CONF_UNSET;
@@ -644,6 +652,14 @@
return NGX_CONF_ERROR;
}

+ ngx_conf_merge_value(conf->session_tickets, prev->session_tickets, 1);
+
+#ifdef SSL_OP_NO_TICKET
+ if (!conf->session_tickets) {
+ SSL_CTX_set_options(conf->ssl.ctx, SSL_OP_NO_TICKET);
+ }
+#endif
+
ngx_conf_merge_ptr_value(conf->session_ticket_keys,
prev->session_ticket_keys, NULL);

diff -r 4aa64f695031 -r d049b0ea00a3 src/http/modules/ngx_http_ssl_module.h
--- a/src/http/modules/ngx_http_ssl_module.h Sat Jan 04 03:32:22 2014 +0400
+++ b/src/http/modules/ngx_http_ssl_module.h Fri Jan 10 16:12:40 2014 +0100
@@ -44,6 +44,7 @@

ngx_shm_zone_t *shm_zone;

+ ngx_flag_t session_tickets;
ngx_array_t *session_ticket_keys;

ngx_flag_t stapling;
diff -r 4aa64f695031 -r d049b0ea00a3 src/mail/ngx_mail_ssl_module.c
--- a/src/mail/ngx_mail_ssl_module.c Sat Jan 04 03:32:22 2014 +0400
+++ b/src/mail/ngx_mail_ssl_module.c Fri Jan 10 16:12:40 2014 +0100
@@ -116,6 +116,13 @@
0,
NULL },

+ { ngx_string("ssl_session_tickets"),
+ NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_MAIL_SRV_CONF_OFFSET,
+ offsetof(ngx_mail_ssl_conf_t, session_tickets),
+ NULL },
+
{ ngx_string("ssl_session_ticket_key"),
NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
ngx_conf_set_str_array_slot,
@@ -191,6 +198,7 @@
scf->prefer_server_ciphers = NGX_CONF_UNSET;
scf->builtin_session_cache = NGX_CONF_UNSET;
scf->session_timeout = NGX_CONF_UNSET;
+ scf->session_tickets = NGX_CONF_UNSET;
scf->session_ticket_keys = NGX_CONF_UNSET_PTR;

return scf;
@@ -339,6 +347,15 @@
return NGX_CONF_ERROR;
}

+ ngx_conf_merge_value(conf->session_tickets,
+ prev->session_tickets, 1);
+
+#ifdef SSL_OP_NO_TICKET
+ if (!conf->session_tickets) {
+ SSL_CTX_set_options(conf->ssl.ctx, SSL_OP_NO_TICKET);
+ }
+#endif
+
ngx_conf_merge_ptr_value(conf->session_ticket_keys,
prev->session_ticket_keys, NULL);

diff -r 4aa64f695031 -r d049b0ea00a3 src/mail/ngx_mail_ssl_module.h
--- a/src/mail/ngx_mail_ssl_module.h Sat Jan 04 03:32:22 2014 +0400
+++ b/src/mail/ngx_mail_ssl_module.h Fri Jan 10 16:12:40 2014 +0100
@@ -41,6 +41,7 @@

ngx_shm_zone_t *shm_zone;

+ ngx_flag_t session_tickets;
ngx_array_t *session_ticket_keys;

u_char *file;

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH] SSL: ssl_session_tickets directive

Dirkjan Bussink 1190 January 10, 2014 10:24AM

Re: [PATCH] SSL: ssl_session_tickets directive

Maxim Dounin 369 January 14, 2014 06:14AM

Re: [PATCH] SSL: ssl_session_tickets directive

Dirkjan Bussink 432 January 14, 2014 07:44AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 123
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready