# What Is Session Resumption (TLS session resumption)?

> 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.

Source: https://ssl.sh/glossary/session-resumption/
Last updated: 2026-11-10

Session resumption lets a client that recently completed a full [TLS handshake](https://ssl.sh/glossary/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](https://ssl.sh/glossary/session-ticket/), where the server hands the client an encrypted copy of the state. TLS 1.3 replaces both with a single [PSK](https://ssl.sh/glossary/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](https://ssl.sh/glossary/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:

```nginx
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):

```bash
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.

## Related terms

- [Session Ticket](https://ssl.sh/zh/glossary/session-ticket/): Session Ticket 是服务器交给客户端保管的加密会话状态，客户端下次连接时出示它即可恢复会话，服务器无需保存任何状态。
- [PSK](https://ssl.sh/zh/glossary/psk/): PSK（预共享密钥）是 TLS 双方在握手前就已共同持有的秘密，用于会话恢复，或在不使用证书的情况下完成身份认证。
- [0-RTT](https://ssl.sh/zh/glossary/0-rtt/): 0-RTT 是 TLS 1.3 和 QUIC 的特性，允许回访的客户端用上一次会话留下的密钥，在第一个数据包里就发送应用数据。
- [TLS 握手](https://ssl.sh/zh/glossary/tls-handshake/): TLS 握手是 TLS 连接开始时的一组消息交换，客户端与服务器在其中协商协议版本和密码套件、验证服务器身份并派生会话密钥。
- [前向保密](https://ssl.sh/zh/glossary/forward-secrecy/): 前向保密是密钥交换的一种安全属性：即使服务器的长期私钥日后泄露，过去连接的会话密钥也不会因此暴露。
- [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/): TLS 1.3 是当前最新的传输层安全协议版本（2018 年的 RFC 8446，现行规范为 RFC 9846），完整握手只需一个往返，且只保留 AEAD 加密算法。
- [TLS 1.2](https://ssl.sh/zh/glossary/tls-1-2/): TLS 1.2 是 2008 年由 RFC 5246 定义的 TLS 版本，引入了基于 SHA-256 的密钥派生和 AES-GCM 等 AEAD 加密算法，至今仍被广泛使用。
