Skip to content

feat(tls): add opt-in ex_ssl 0.4 with verified TLS 1.2 and 1.3 - #14

Merged
gsmlg merged 20 commits into
mainfrom
codex/replace-ssl-with-ex-ssl
Sep 22, 2026
Merged

gsmlg merged 20 commits into
mainfrom
codex/replace-ssl-with-ex-ssl

Conversation

@gsmlg

@gsmlg gsmlg commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Behavior

Add explicitly selectable :ex_ssl TLS to Fetch, HTTP/1.1, HTTP/2, WebSocket and EventSource. OTP :ssl remains the default. Backend selection survives redirects and reconnects, with no automatic fallback or replay of uncertain request bytes. HTTP/3 and WebTransport retain their QUIC implementation.

Use published ex_ssl 0.4.0 (~> 0.4.0, locked to 0.4.0). The adapter supports verified TLS 1.3 and explicitly configured TLS 1.2, validated client identities, ordered algorithm preferences, and an explicit TCP-option allowlist. Client identities stay bound to their original redirect origin. TLS 1.3 automatic ticket resumption is opt-in and preserves trust/profile/ALPN isolation. Unsupported options fail explicitly.

Correctness and packaging

Preserve complete HTTP/2 early responses when optional control writes encounter authenticated peer closure, including responses spanning TLS records and post-completion NO_ERROR resets. Success still requires END_STREAM, complete headers, valid Content-Length and bounded framing. Stop pending upload DATA at response completion. Truncation, required-write failures, cancellation and deadlines remain errors.

Run child app suites through the umbrella root and verify all five built packages in a fresh external consumer with transitive dependency resolution. Deterministic regressions use explicit peer/message barriers. TLS 1.2 large-response tests hold the reference peer until the entire response is read; separate Phase 0 tests continue to exercise close-before-control-write behavior.

Validation

  • Merged tree: 444 tests + 20 doctests, zero failures.
  • Formatting, development/test strict compilation and Credo pass. Dialyzer passes with four existing ignored diagnostics and no new diagnostics.
  • Packaged-source integration: 47 tests, zero failures after fixing a test-peer shutdown race; the initial intermittent failure is recorded in the progress ledger.
  • Published Hex ex_ssl 0.4.0: all 47 packaged TLS feature tests and all 11 deterministic cross-record cases pass. The separate cold consumer smoke passes with transitive-only resolution and verified package metadata.
  • GitHub checks below validate the final pushed revision; local commands and corrected historical failures are recorded in docs/pr-14-validation.md.

Compatibility boundaries and historical evidence are documented in docs/ex-ssl-consumer-contract.md, docs/pr-14-validation.md, and the ex_ssl cross-repository progress ledger. This does not claim full OTP parity or a completed human security review. TLS 1.2 resumption, mTLS resumption and 0-RTT remain unsupported.

Keep OTP :ssl as the default while supporting :ex_ssl for fetch, WebSocket, and EventSource TLS connections.
@gsmlg gsmlg changed the title chore(deps): add ex_ssl dependency feat(tls): add opt-in ex_ssl backend and harden HTTP/2 shutdown Sep 20, 2026
@gsmlg gsmlg changed the title feat(tls): add opt-in ex_ssl backend and harden HTTP/2 shutdown feat(tls): add opt-in ex_ssl and preserve buffered HTTP/2 responses Sep 20, 2026
@gsmlg gsmlg changed the title feat(tls): add opt-in ex_ssl and preserve buffered HTTP/2 responses feat(tls): add opt-in ex_ssl and preserve early HTTP/2 responses Sep 20, 2026
@gsmlg gsmlg changed the title feat(tls): add opt-in ex_ssl and preserve early HTTP/2 responses feat(tls): add opt-in ex_ssl 0.4 with verified TLS 1.2 and 1.3 Sep 22, 2026
@gsmlg
gsmlg merged commit 97cf130 into main Sep 22, 2026
32 checks passed
@gsmlg
gsmlg deleted the codex/replace-ssl-with-ex-ssl branch September 22, 2026 09:48
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.

2 participants