Glossary

Session Resumption (TLS session resumption)

Last verified

Definition

Session resumption is a TLS mechanism that lets a client reconnect using secrets from an earlier session, skipping the full key exchange and certificate check.

Session resumption lets a client that recently completed a full TLS handshake with a server reuse that session's secret material instead of running key exchange and certificate authentication again. TLS 1.2 has two forms: session IDs, where the server keeps the state in a cache, and session tickets, where the server hands the client an encrypted copy of the state. TLS 1.3 replaces both with a single PSK-based mechanism delivered in NewSessionTicket messages.

Why it matters

A resumed handshake is cheaper for the server, because no certificate signature is needed, and faster for the client. In TLS 1.3 it is also the prerequisite for 0-RTT. The security trade-off lies in how the saved state is protected. In TLS 1.2, anyone who obtains the server's ticket key or session cache can decrypt the sessions it covers, which weakens forward secrecy. TLS 1.3's psk_dhe_ke mode runs a fresh ECDHE exchange during resumption, so resumed connections keep forward secrecy. Load-balanced fleets need a shared cache or shared ticket keys; otherwise a client that lands on a different server falls back to a full handshake.

Example

A typical nginx session cache:

ssl_session_cache   shared:SSL:10m;   # nginx docs: about 4000 sessions per megabyte
ssl_session_timeout 1d;

Check that resumption works over TLS 1.2 (OpenSSL reconnects five times with the same session):

openssl s_client -connect example.com:443 -servername example.com -tls1_2 -reconnect </dev/null 2>/dev/null | grep -E '^(New|Reused)'

Common misconceptions

  • Resumption skips authentication, so it is insecure. The resumed session is cryptographically bound to the original, fully authenticated one; the server does not need to prove its identity again.
  • Resumption and 0-RTT are the same thing. A normal resumption still takes one round trip; 0-RTT is an optional extra that sends data before that round trip completes.
  • Disabling session tickets disables resumption. Depending on the TLS library, a server-side session cache can still provide resumption.

See also