Skip to content

Expose TLS session resumption, and answer honestly about 0-RTT - #7

Open
xl32 wants to merge 1 commit into
machine-moon:trunkfrom
xl32:tls-resumption
Open

Expose TLS session resumption, and answer honestly about 0-RTT#7
xl32 wants to merge 1 commit into
machine-moon:trunkfrom
xl32:tls-resumption

Conversation

@xl32

@xl32 xl32 commented Aug 7, 2026

Copy link
Copy Markdown

Session tickets were left entirely to OpenSSL's defaults, so an operator had no way to see or change whether the server hands out resumable sessions, and no answer at all about 0-RTT.

Add H3SessionTickets (default on, matching the previous behaviour) which maps to SSL_CTX_set_num_tickets, and set a session id context so tickets this server issues are only resumed against its own sessions. Worth knowing when reading the docs: each worker process keeps its own ticket keys, so a client resumes only when it returns to the process that issued its ticket, and otherwise falls back to a full handshake.

0-RTT is the harder question. OpenSSL's own QUIC stack does not accept early data on the server side, so simply wiring a directive to SSL_CTX_set_max_early_data would produce a setting that reads as enabled and does nothing. Instead add an early_data capability bit to quic_caps, which the engines answer for themselves, and have post_config warn -- naming the engine -- when H3EarlyData is on but the engine cannot honour it. The setting is plumbed through quic_settings so an engine that gains server-side 0-RTT needs no further work here, and defaults to off because 0-RTT data is replayable by design.

Session tickets were left entirely to OpenSSL's defaults, so an operator
had no way to see or change whether the server hands out resumable
sessions, and no answer at all about 0-RTT.

Add H3SessionTickets (default on, matching the previous behaviour) which
maps to SSL_CTX_set_num_tickets, and set a session id context so tickets
this server issues are only resumed against its own sessions. Worth
knowing when reading the docs: each worker process keeps its own ticket
keys, so a client resumes only when it returns to the process that issued
its ticket, and otherwise falls back to a full handshake.

0-RTT is the harder question. OpenSSL's own QUIC stack does not accept
early data on the server side, so simply wiring a directive to
SSL_CTX_set_max_early_data would produce a setting that reads as enabled
and does nothing. Instead add an early_data capability bit to quic_caps,
which the engines answer for themselves, and have post_config warn --
naming the engine -- when H3EarlyData is on but the engine cannot honour
it. The setting is plumbed through quic_settings so an engine that gains
server-side 0-RTT needs no further work here, and defaults to off because
0-RTT data is replayable by design.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant