apache / apache/fluss

[TLS] Wire TLS encryption into the server Netty pipeline

Open
#3,792 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.1k
Forks
625
Avg merge
3d 14h
Merged PRs (30d)
97

Description

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/fluss/issues) and found nothing similar.

### Description

Part of #3786 ([FIP-29: (m)TLS Support](https://cwiki.apache.org/confluence/spaces/FLUSS/pages/406620533/FIP-29+m+TLS+Support)).

**Wave 1** — depends on: SSL config & context foundations (#3796).

Wires `SslHandler` into the server-side pipeline, enabling real encrypted connections for the first time — encryption only, no client-certificate requirement yet (`ClientAuth.NONE` on every TLS listener).

- `ServerChannelInitializer` — `pipeline.addFirst("ssl", ...)` for listeners in `security.ssl.enabled.listeners`, before the frame decoder.
- `NettyServer` / `FlussProtocolPlugin` — thread `Configuration` + listener name into `createChannelHandler`; minimal fail-fast validation (a TLS-enabled listener requires a keystore).
- `TlsFileRegionHandler` — copies file-backed log-fetch records into JVM memory before encryption, since `sendfile` and `SslHandler` are mutually exclusive.
- `TlsClusterITCase` — end-to-end cluster test with an encrypted listener.

**Depends on:** SSL config & context foundations (#3796).
**Depended on by:** client pipeline integration (#3797), internal listener migration (#3798), certificate hot-reload (#3799), mTLS authentication (#3793), Flink connector test (#3794), Spark connector test (#3800).

_Estimated diff size: ~415 lines._

_(Note: this replaces this ticket's original broader "server + client" scope, now split further into dedicated tickets.)_

### Willingness to contribute

- [x] I'm willing to submit a PR!

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the SSL config and context foundations in #3796, then inspect ServerChannelInitializer, NettyServer, FlussProtocolPlugin, and TlsFileRegionHandler. Run TlsClusterITCase to verify an encrypted listener works end to end. Done means TLS listeners use the server pipeline, configuration and listener names reach channel creation, missing keystores fail fast, and file-backed log-fetch records work with encryption.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, networking, security, testing
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.