[nginx] SSL: always renewing tickets with TLSv1.3 (ticket #1892).

Maxim Dounin mdounin at mdounin.ru
Tue Jan 25 15:08:00 UTC 2022


details:   https://hg.nginx.org/nginx/rev/e30f7dc7f143
branches:  
changeset: 7997:e30f7dc7f143
user:      Maxim Dounin <mdounin at mdounin.ru>
date:      Mon Jan 24 17:18:50 2022 +0300
description:
SSL: always renewing tickets with TLSv1.3 (ticket #1892).

Chrome only uses TLS session tickets once with TLS 1.3, likely following
RFC 8446 Appendix C.4 recommendation.  With OpenSSL, this works fine with
built-in session tickets, since these are explicitly renewed in case of
TLS 1.3 on each session reuse, but results in only two connections being
reused after an initial handshake when using ssl_session_ticket_key.

Fix is to always renew TLS session tickets in case of TLS 1.3 when using
ssl_session_ticket_key, similarly to how it is done by OpenSSL internally.

diffstat:

 src/event/ngx_event_openssl.c |  16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diffs (26 lines):

diff -r 5d88e2bf92b3 -r e30f7dc7f143 src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c	Sat Jan 22 00:28:51 2022 +0300
+++ b/src/event/ngx_event_openssl.c	Mon Jan 24 17:18:50 2022 +0300
@@ -4451,7 +4451,21 @@ ngx_ssl_session_ticket_key_callback(ngx_
             return -1;
         }
 
-        return (i == 0) ? 1 : 2 /* renew */;
+        /* renew if TLSv1.3 */
+
+#ifdef TLS1_3_VERSION
+        if (SSL_version(ssl_conn) == TLS1_3_VERSION) {
+            return 2;
+        }
+#endif
+
+        /* renew if non-default key */
+
+        if (i != 0) {
+            return 2;
+        }
+
+        return 1;
     }
 }
 



More information about the nginx-devel mailing list