aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Gustafsson <dgustafsson@postgresql.org>2024-07-26 11:09:45 +0200
committerDaniel Gustafsson <dgustafsson@postgresql.org>2024-07-26 11:09:45 +0200
commit3df7f44a8c7c456c0a0d4d02a1167e972dc24eaa (patch)
treeba1134dee9dbb6479ceafdcb24258e45fdc9b7d8 /src
parent8a1a4087bd5fd09f42bcca2c91ff7eceaa2a0eab (diff)
downloadpostgresql-3df7f44a8c7c456c0a0d4d02a1167e972dc24eaa.tar.gz
postgresql-3df7f44a8c7c456c0a0d4d02a1167e972dc24eaa.zip
Disable all TLS session tickets
OpenSSL supports two types of session tickets for TLSv1.3, stateless and stateful. The option we've used only turns off stateless tickets leaving stateful tickets active. Use the new API introduced in 1.1.1 to disable all types of tickets. Backpatch to all supported versions. Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi> Reported-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/20240617173803.6alnafnxpiqvlh3g@awork3.anarazel.de Backpatch-through: v12
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/be-secure-openssl.c14
-rw-r--r--src/include/pg_config.h.in3
2 files changed, 16 insertions, 1 deletions
diff --git a/src/backend/libpq/be-secure-openssl.c b/src/backend/libpq/be-secure-openssl.c
index 39b1a66236b..162ac1eb7b7 100644
--- a/src/backend/libpq/be-secure-openssl.c
+++ b/src/backend/libpq/be-secure-openssl.c
@@ -258,8 +258,20 @@ be_tls_init(bool isServerStart)
}
}
- /* disallow SSL session tickets */
+ /*
+ * Disallow SSL session tickets. OpenSSL use both stateful and stateless
+ * tickets for TLSv1.3, and stateless ticket for TLSv1.2. SSL_OP_NO_TICKET
+ * is available since 0.9.8f but only turns off stateless tickets. In
+ * order to turn off stateful tickets we need SSL_CTX_set_num_tickets,
+ * which is available since OpenSSL 1.1.1. LibreSSL 3.5.4 (from OpenBSD
+ * 7.1) introduced this API for compatibility, but doesn't support session
+ * tickets at all so it's a no-op there.
+ */
+#ifdef HAVE_SSL_CTX_SET_NUM_TICKETS
+ SSL_CTX_set_num_tickets(context, 0);
+#else
SSL_CTX_set_options(context, SSL_OP_NO_TICKET);
+#endif
/* disallow SSL session caching, too */
SSL_CTX_set_session_cache_mode(context, SSL_SESS_CACHE_OFF);
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index f8d3e3b6b84..e2834912f89 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -510,6 +510,9 @@
/* Define to 1 if you have the `X509_get_signature_info' function. */
#undef HAVE_X509_GET_SIGNATURE_INFO
+/* Define to 1 if you have the `SSL_CTX_set_num_tickets' function. */
+#undef HAVE_SSL_CTX_SET_NUM_TICKETS
+
/* Define to 1 if the assembler supports X86_64's POPCNTQ instruction. */
#undef HAVE_X86_64_POPCNTQ