Support externally supplied rotating TLS ticket keys for cross-node session resumption

オープン
#59 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust
領域
backend, security

調査の方向性

Start in src/tls.rs at the ticketer setup identified in the issue, then read rustls's ProducesTickets interface and the TLS-config caching path. The scope requires a rotating key ring, policy isolation, updates to cached and suspended routes, and cross-process TLS 1.2/1.3 validation. Done means the acceptance cases pass, including key rotation overlap and rejection across incompatible scopes and policies.

索引モデルが issue の本文から書いたものです。

説明

Problem

A client that obtains a TLS session ticket from cluster node A should be able to resume on node B serving the same TLS identity and policy. Today Symphony creates an independently randomized rustls::crypto::ring::Ticketer for each ServerConfig. Reusing the proxy's TlsConfigCache preserves tickets locally but does not synchronize keys across nodes or processes.

Follow-up to PR #57, requested in its review discussion. The current ticketer setup is in src/tls.rs.

Scope

Add an embedding and standalone-server configuration interface for an externally supplied, rotating ticket-key ring. The cluster management layer supplies keys; Symphony handles ticket encryption/decryption through rustls's ProducesTickets interface.

  • Allow separate key rings or key scopes for different clusters sharing a proxy. Include the scope in TLS-config caching so otherwise identical cert/policy inputs cannot accidentally share a ticket provider across clusters.
  • Scope tickets to compatible server identity, client CA and client-cert requirement, and ALPN policy. Use domain-separated derived keys or authenticated context binding. Preserve isolation when policy changes; rustls does not enforce equivalent configuration when sharing ticketers.
  • Support an active encryption key and bounded previous decryption keys, with explicit key IDs and expiry. Key updates must reach existing cached configs and both static and resolved/suspended routes without requiring a listener restart.
  • Use reviewed authenticated encryption and nonce generation safe across independent nodes sharing keys. Keep key material out of logs, debug output and metrics, and erase retired material. Define how missing/invalid configuration and expired keys fall back to full handshakes while preserving route isolation.
  • Preserve the existing local-key behavior for deployments that do not configure shared keys. Document that identical certificates alone do not enable cross-node resumption.

Acceptance

  • With separate proxy instances/processes using the same ring and compatible TLS configuration, obtain a ticket on A and resume on B under TLS 1.2 and TLS 1.3; confirm that resumption actually occurred.
  • Exercise table routes and resolved/suspended routes, including updates to an already cached config.
  • Roll out a next key before activation; show that tickets minted before and after activation resume during the overlap, and that expired/removed keys cause a full handshake.
  • Verify rejection across different cluster scopes, server identities and incompatible mTLS/ALPN policies, including no-client-auth to required-client-auth transitions.
  • Validate malformed/unknown keys and failed updates without breaking unrelated routes or exposing secrets.

TLS 1.2 session-ID resumption remains a separate state-storage concern; this issue covers ticket-based resumption and does not require a shared session database. Shared tickets do not imply enabling TLS early data.

Related: #58 tracks local cache loss on listener recreation; externally supplied keys should also survive proxy recreation while they remain valid.

Platform integration: Central Manager key custody/rotation: https://github.com/HarperFast/central-manager/issues/939; Host Manager route configuration/handoff: https://github.com/HarperFast/host-manager/issues/251.

主要言語
Rust
スター
1
フォーク
0
平均マージ
19時間 12分
マージ済み PR(30日)
13

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

HarperFast/symphony のほかの issue

HarperFast/symphony の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。