Skip to content

tls: Add certificate compression support (RFC 8879)#2

Open
bellatoris wants to merge 722 commits intomainfrom
doogie/tls-cert-compression-multi
Open

tls: Add certificate compression support (RFC 8879)#2
bellatoris wants to merge 722 commits intomainfrom
doogie/tls-cert-compression-multi

Conversation

@bellatoris
Copy link
Copy Markdown
Owner

Add TLS certificate compression with brotli, zstd, and zlib algorithms. This reduces TLS handshake size, especially beneficial for QUIC where the ServerHello needs to fit in the initial response.

Key changes:

  • Move cert_compression from quic/ to tls/ for shared use
  • Add brotli and zstd algorithms alongside existing zlib
  • Add compression stats: ssl.certificate_compression..*
  • Add runtime flag (default: disabled) for safe rollout

Risk Level: Low (feature disabled by default)
Testing: Unit tests, integration tests
Docs Changes: Updated ssl_stats.rst
Release Notes: Added to changelogs/current.yaml

Runtime guard: envoy.reloadable_features.tls_support_certificate_compression

Commit Message:
Additional Description:
Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional API Considerations:]

@bellatoris bellatoris force-pushed the doogie/tls-cert-compression-multi branch from 22b1941 to ac6955c Compare December 19, 2025 03:01
@bellatoris bellatoris force-pushed the doogie/tls-cert-compression-multi branch 9 times, most recently from 185d581 to b932d5d Compare January 15, 2026 15:37
@bellatoris bellatoris force-pushed the doogie/tls-cert-compression-multi branch 15 times, most recently from 557ef3f to 44e816f Compare January 30, 2026 03:36
@bellatoris bellatoris force-pushed the doogie/tls-cert-compression-multi branch from 23345d8 to 6988af6 Compare February 8, 2026 16:21
Signed-off-by: Doogie Min <doogie.min@sendbird.com>
@bellatoris bellatoris force-pushed the doogie/tls-cert-compression-multi branch from 6988af6 to c970a1c Compare February 8, 2026 17:17
phlax added 2 commits February 8, 2026 18:48
Signed-off-by: Ryan Northey <ryan@synca.io>
- add a `-contrib` suffix to the version string
- test version strings for suffixes
- fix distroless contrib binary
- add a test to ensure binary in distroless contrib is really contrib
- fix distroless ci to ensure just-built image is the one tested

Fix envoyproxy#43382

---------

Signed-off-by: Ryan Northey <ryan@synca.io>
agrawroh and others added 29 commits March 4, 2026 14:12
…xy#43769)

## Description

This PR adds a method to get the host health by address in the LB
Dynamic Module.

---

**Commit Message:** dynamic_modules: add a method to get host health by
address
**Additional Description:** Adds a method to get the host health by
address in the LB Dynamic Module.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
Commit Message:
The Rust compiler doesn't guarantee that the layout of slices won't
change. Add a type to encapsulate the unsafeness and assert that the
transformation is safe in debug builds.

Additional Description:
Risk Level: low, this only adds assertions to catch future
incompatibilities
Testing: ran unit tests locally
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a

Signed-off-by: Alex Bakon <abakon@netflix.com>
## Description

This PR adds retry awareness to the LB Dynamic Modules.

---

**Commit Message:** dynamic_modules: add retry awareness to lb module
**Additional Description:** Added retry awareness to the LB Dynamic
Modules.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
…43668)

Commit Message: [file_server] Make suffix type mappings case-insensitive
Additional Description: Very small change to file_server, after
realizing that we have an environment that serves both PNG and png
files. It doesn't make much sense to have to define every combination of
case for suffixes (maybe there's some Png or pnG), so making it
case-insensitive makes sense.

One way to do that would be to accept any case and convert at init time
- but that would provoke a confusing behavior if someone configured
`{"png": "image/png", "PNG": "application/octet-stream"}`. We could do a
deduplication validation after the fact to prevent that, but that adds a
bunch of extra code for something that's trivially simple if we just
enforce that it be configured in lowercase only at the proto validation
level (which should be fine as a change since the filter is one day old
and marked WIP).

A bonus effect of doing it this way is that protovalidate is also
validating "no periods" which I previously validated in code, so that
code and its test can be removed.
Risk Level: Negligible, minor change to brand new filter.
Testing: Some removed. Manually validated that the protovalidate rule is
functioning as expected.
Docs Changes: n/a
Release Notes: Added previously-forgotten changelog.
Platform Specific Features: n/a

---------

Signed-off-by: Raven Black <ravenblack@dropbox.com>
envoyproxy#43776)

## Description

This PR splits up the monolith RUST SDK `lib.rs` into smaller parts by
retaining

---

**Commit Message:** dynamic_modules: split the RUST SDK lib.rs into
smaller per-extensions
**Additional Description:**
**Risk Level:** Low
**Testing:** CI
**Docs Changes:** N/A
**Release Notes:** N/A

---------

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
… LB context (envoyproxy#43777)

## Description

This PR adds a way to access overridden host address and the strict flag
from the LB context.

---

**Commit Message:** dynamic_modules: add a way to access overridden host
address from the LB context
**Additional Description:** Added a way to access overridden host
address and the strict flag from the LB context.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
…nvoyproxy#43778)

## Description

This PR adds host membership update notifications for the Load Balancing
Dynamic Module.

---

**Commit Message:** dynamic_modules: added host membership update
notifications for LB
**Additional Description:** Added host membership update notifications
for the Load Balancing Dynamic Module.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
**Problem**

When `direct_response` uses `body_format.content_type`, the response
always returns `Content-Type: text/plain`. The field was parsed from
proto but never stored or applied.

**Fix**

- Added `responseContentType()` pure virtual to `DirectResponseEntry`
- Stored `content_type` from `body_format` in `RouteEntryImplBase`
(explicit → JSON default → empty)
- Applied it in the `sendLocalReply` `modify_headers` lambda

**Tests added**

- `RouteConfigurationV2.DirectResponseBodyFormatContentType` — all 4
content-type cases
- `RouterTest.DirectResponseWithBodyFormatContentType` — end-to-end
`text/html` header
- `RouterTest.DirectResponseWithBodyFormatNoContentType` — no override
when empty

Fixes envoyproxy#43680

---------

Signed-off-by: garima-uttam <garimauttam@ibm.com>
## Description

Trying to bring back the Gemini reviews using the manual trigger.

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
<!--
!!!ATTENTION!!!

If you are fixing *any* crash or *any* potential security issue, *do
not*
open a pull request in this repo. Please report the issue via emailing
envoy-security@googlegroups.com where the issue will be triaged
appropriately.
Thank you in advance for helping to keep Envoy secure.

!!!ATTENTION!!!

For an explanation of how to fill out the fields, please see the
relevant section
in
[PULL_REQUESTS.md](https://github.com/envoyproxy/envoy/blob/main/PULL_REQUESTS.md)

!!!ATTENTION!!!

Please check the [use of generative AI
policy](https://github.com/envoyproxy/envoy/blob/main/CONTRIBUTING.md?plain=1#L41).

You may use generative AI only if you fully understand the code. You
need to disclose
this usage in the PR description to ensure transparency.
-->

Commit Message: use per connection rping timer with jitter similar to
HTTP2 keepalives
Additional Description: we have observed higher p90 latencies for
requests from upstream to downstream when there are high number(>10k) of
active reverse connections due to the for loop for rpings which
initiates rpings for all connections without yielding for the requests.
Per connection rping timers help with request events not starving
Risk Level: Low
Testing: Unit tests
Docs Changes: N/A
Release Notes: N/A
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional [API
Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):]

---------

Signed-off-by: Prasad I V <prasad.iv@databricks.com>
Co-authored-by: Prasad I V <prasad.iv@databricks.com>
…yproxy#43748)

Commit Message: dym sdk: add the config scheduler support to go sdk and
cpp sdk
Additional Description:

Add the config scheduler to go sdk and cpp sdk.

Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional [API
Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):]

---------

Signed-off-by: wbpcode/wangbaiping <wbphub@gmail.com>
…voyproxy#43700)

Commit Message:
update() took a const reference, making the std::move inside it a no-op:
std::move on a const& yields a const&& which resolves to the copy
constructor, so every EDS config update deep-copied the entire
ClusterLoadAssignment protobuf (all endpoints, localities, addresses,
metadata) into the unique_ptr.

Accept by value so callers can move their local variables in. The
protobuf move constructor swaps internal pointers in O(1) regardless of
message size, replacing what was a full recursive copy with two pointer
swaps. This matters on the EDS hot path for large clusters where the
control plane pushes frequent endpoint updates.
Additional Description:
Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional [API
Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):]

---------

Signed-off-by: William Dauchy <william.dauchy@datadoghq.com>
…oxy#43770)

This deletes code that wasn't needed anymore

Signed-off-by: Greg Greenway <ggreenway@apple.com>
Signed-off-by: Takeshi Yoneda <tyoneda@netflix.com>
Commit Message:
This allows callers to provide a slice, which could be on the stack,
instead of a Vec, which requires allocating on the heap. This is safe
since the called functions weren't using the fact that they were taking
ownership of the input, and were just producing a slice from the Vec
internally and acting on that.

Additional Description:
Since the changed methods are using `unsafe` code, the usual "if it
compiles, it's safe" Rust guarantees around lifetimes don't apply. That
being said, all the callers were already taking containers of
references, so if there is any usage beyond the lifetimes of those
values happening with this change, it was present in the previous
version of the code.

Risk Level: low
Testing: build and ran unit tests
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a

Signed-off-by: Alex Bakon <abakon@netflix.com>
…xy#43798)

## Description

We are missing `#[repr(transparent)]` on the metrics methods. This PR is
to add it.

---

**Commit Message:** dynamic_modules: refactor RUST SDK to add
repr(transparent)
**Additional Description:** Added missing `#[repr(transparent)]` on the
metrics methods.
**Risk Level:** Low
**Testing:** CI
**Docs Changes:** N/A
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
…3805)

## Description

This PR adds Cluster/host stats access for the Load Balancing Dynamic
Module.

---

**Commit Message:** dynamic_modules: added Cluster/host stats access for
lb
**Additional Description:** Added Cluster/host stats access for the Load
Balancing Dynamic Module.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
…envoyproxy#43797)

## Description

This PR adds the missing `set_dynamic_metadata_number` to the Listener
Filter Dynamic Modules.

---

**Commit Message:** dynamic_modules: add set_dynamic_metadata_number for
listener filters
**Additional Description:** Added the missing
`set_dynamic_metadata_number` to the Listener Filter Dynamic Modules.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
…nvoyproxy#43796)

## Description

This PR adds the missing `set_dynamic_metadata_bool` to the Network
Filter Dynamic Modules.

---

**Commit Message:** dynamic_modules: add set_dynamic_metadata_bool for
network filters
**Additional Description:** Added the missing
`set_dynamic_metadata_bool` to the Network Filter Dynamic Modules.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** N/A

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
…y#43809)

Signed-off-by: Takeshi Yoneda <tyoneda@netflix.com>
Commit Message: dym sdk: refactor the cpp sdk to use std
Additional Description:

Rather than absl, to use std in the cpp dynamic module SDK.

Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional [API
Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):]

---------

Signed-off-by: wbpcode/wangbaiping <wbphub@gmail.com>
## Description

This PR adds ability to emit stats to the Dynamic Modules for LB.

---

**Commit Message:** dynamic_modules: added metrics for LB module
**Additional Description:** Added ability to emit stats to the Dynamic
Modules for LB.
**Risk Level:** Low
**Testing:** Added Tests
**Docs Changes:** Added
**Release Notes:** Added

---------

Signed-off-by: Rohit Agrawal <rohit.agrawal@databricks.com>
## Commit Message
Fix flaky router integ test usually surfaced as a segfault under asan

## Additional Description

aakugan@4af388b

Caused because the integ test makes a seperate thread for the upstream
connection and the sentinel frame callback has a ptr to the
ServerConnectionImpl which is usually not the case for actual workflows
-> only one thread.
After everything is shut down on the test thread the upstream thread can
have a callback which crashes.

Ref:
https://github.com/envoyproxy/envoy/actions/runs/22659006942/job/65674847129#step:19:751

Signed-off-by: aakugan <aakashganapathy2@gmail.com>
<!--
!!!ATTENTION!!!

If you are fixing *any* crash or *any* potential security issue, *do
not*
open a pull request in this repo. Please report the issue via emailing
envoy-security@googlegroups.com where the issue will be triaged
appropriately.
Thank you in advance for helping to keep Envoy secure.

!!!ATTENTION!!!

For an explanation of how to fill out the fields, please see the
relevant section
in
[PULL_REQUESTS.md](https://github.com/envoyproxy/envoy/blob/main/PULL_REQUESTS.md)

!!!ATTENTION!!!

Please check the [use of generative AI
policy](https://github.com/envoyproxy/envoy/blob/main/CONTRIBUTING.md?plain=1#L41).

You may use generative AI only if you fully understand the code. You
need to disclose
this usage in the PR description to ensure transparency.
-->

Commit Message:
Additional Description:
Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional [API
Considerations](https://github.com/envoyproxy/envoy/blob/main/api/review_checklist.md):]

---------

Signed-off-by: tyxia <tyxia@google.com>
Signed-off-by: Ethan <ethantruong@google.com>
bellatoris added a commit that referenced this pull request Mar 12, 2026
…use-after-free fix

Code review fixes:
- Use absl::optional<string> for zone parameter (Comment #1)
- Skip locality modification when zone is nullopt (Comment #2)
- Simplify fetch_sub pattern to fetch_sub(1)==1 (Comment envoyproxy#4)
- Fix use-after-free: move zone_callbacks_.erase after all address uses
- Add :ref: link in proto doc (Comment envoyproxy#7)
- Add const qualifiers (Comments envoyproxy#8, envoyproxy#9)

Zone discovery integration tests (redis_cluster_test.cc):
- ZoneDiscoveryBasicFlow: both nodes return valid zones
- ZoneDiscoveryPartialZones: one node missing availability_zone
- ZoneDiscoveryResponseTypeMismatch: Error type instead of BulkString
- ZoneDiscoveryAllFailure: both INFO requests fail
- ZoneDiscoveryMixedSuccessAndFailure: one succeeds, one fails
- ZoneDiscoveryMakeRequestReturnsNull: makeRequest returns nullptr

LB tests (redis_cluster_lb_test.cc):
- LocalZoneAffinityZoneDiscoveryFailure: hosts without zones
- LocalZoneAffinityReplicasAndPrimaryUnhealthyLocalPrimary: unhealthy local primary fallback

Signed-off-by: Doogie Min <doogie.min@sendbird.com>
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.