]> git.ipfire.org Git - thirdparty/openssl.git/commit
Implement RFC 8701 GREASE for TLS ClientHello
authormcrmck <willmccormack14@gmail.com>
Sun, 8 Mar 2026 02:51:17 +0000 (21:51 -0500)
committerNeil Horman <nhorman@openssl.org>
Tue, 17 Mar 2026 14:57:59 +0000 (10:57 -0400)
commita1420a699d2589c2c524ea1f569747f6aaa738f3
tree82f9371b8168ab243d78d5b3f914e1cb0a5c7bc8
parent25c2f88caaaa53db5f116206207d1d760c9d2c53
Implement RFC 8701 GREASE for TLS ClientHello

Add client-side GREASE (Generate Random Extensions And Sustain
Extensibility) support per RFC 8701. When SSL_OP_GREASE is set,
the TLS client injects reserved 0x?A?A-pattern values into the
ClientHello to prevent ecosystem ossification caused by servers
that reject unknown values.

GREASE values are injected into:
- Cipher suites (prepended)
- Supported versions extension (prepended)
- Supported groups extension (prepended)
- Signature algorithms extension (appended)
- Key share extension (prepended, 1 zero byte)
- Two standalone extensions (one empty, one with 1 zero byte)

The implementation uses lazy-seeded random values that remain
consistent across HelloRetryRequest retransmissions. GREASE values
from server responses are rejected as illegal parameters.

Add -grease option to s_client to enable GREASE from the command line.

Closes #9660

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.foundation>
Reviewed-by: Neil Horman <nhorman@openssl.org>
MergeDate: Tue Mar 17 14:58:25 2026
(Merged from https://github.com/openssl/openssl/pull/30303)
13 files changed:
CHANGES.md
apps/s_client.c
doc/man1/openssl-s_client.pod.in
doc/man3/SSL_CTX_set_options.pod
include/openssl/ssl.h.in
ssl/ssl_ciph.c
ssl/ssl_lib.c
ssl/ssl_local.h
ssl/statem/extensions.c
ssl/statem/extensions_clnt.c
ssl/statem/statem_local.h
test/ext_internal_test.c
test/sslapitest.c