Title: ECH (Encrypted client hello) support · Issue #1924 · haproxy/haproxy · GitHub
Open Graph Title: ECH (Encrypted client hello) support · Issue #1924 · haproxy/haproxy
X Title: ECH (Encrypted client hello) support · Issue #1924 · haproxy/haproxy
Description: Your Feature Request ECH (Encrypted client hello) is a developing specification for encrypting the original client hello in an HTTP1.1/HTTP2 context. The main purpose is making SNI sniffing impossible by middle boxes and other such adver...
Open Graph Description: Your Feature Request ECH (Encrypted client hello) is a developing specification for encrypting the original client hello in an HTTP1.1/HTTP2 context. The main purpose is making SNI sniffing impossi...
X Description: Your Feature Request ECH (Encrypted client hello) is a developing specification for encrypting the original client hello in an HTTP1.1/HTTP2 context. The main purpose is making SNI sniffing impossi...
Opengraph URL: https://github.com/haproxy/haproxy/issues/1924
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"ECH (Encrypted client hello) support","articleBody":"### Your Feature Request\r\n\r\nECH (Encrypted client hello) is a developing specification for encrypting the original client hello in an HTTP1.1/HTTP2 context.\r\n\r\nThe main purpose is making SNI sniffing impossible by middle boxes and other such adversarial systems. The practical implementation is not dissimilar to how SSL certificates trust is established, by using certain new DNS records (+ DNS-over-HTTPS/TLS) as source of public keys involved (instead of a few CAs).\r\n\r\nI had a short chat on the topic with @wlallemand at HAProxyConf, and he was aware of it and of the PoC referenced below. He hinted at it maybe being less relevant than before due to QUIC bringing encryption all the way through, but QUIC reaching the same level of usage as HTTP1.1/2 will take years. Especially when it still relies on Alt-Svc response headers at the moment, and while one will soon be able to advertise QUIC at the DNS level directly (see https://datatracker.ietf.org/doc/draft-ietf-dnsop-svcb-https/) this is also going to take a hot minute to be widely available, so I'm still quite interested in ECH in general (and hopefully I'm not alone in that).\r\n\r\nSome relevant references/notes:\r\n- IETF draft: https://datatracker.ietf.org/doc/draft-ietf-tls-esni/\r\n- Cloudflare article on the topic: https://blog.cloudflare.com/encrypted-client-hello/ and public rollout announcement: https://blog.cloudflare.com/announcing-encrypted-client-hello/\r\n- PoC implementation for HAProxy (and other popular webservers/load-balancer software): https://defo.ie/ (and specifically https://github.com/sftcd/openssl/blob/ECH-draft-13a/esnistuff/haproxy.md)\r\n- Browser tracking bug for Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=1091403 and feature now shipping to stable in version 117: https://chromestatus.com/feature/6196703843581952\r\n- Browser tracking bug for Firefox: ~https://bugzilla.mozilla.org/show_bug.cgi?id=1590863~ https://bugzilla.mozilla.org/show_bug.cgi?id=1725938\r\n- No tracking bug for Webkit since it's more constrained in scope (as a rendering engine rather than a fully-fledged browser per se, see https://github.com/WebKit/standards-positions/issues/46)\r\n\r\nMore specifically for HAProxy, the work done by the DEfO PoC people has progressed quite a bit on the OpenSSL side:\r\n- ECH tracking issue https://github.com/openssl/openssl/issues/7482\r\n- Which itself is waiting on HPKE support (issue https://github.com/openssl/openssl/issues/14748) but the relevant PR for that issue is getting to its final stages so hopefully getting close 🤞 (the PR author is the same person that did the early exploration of ECH on defo.ie)\r\n\r\nThis is still somewhat early days (need HPKE merged, ECH to go from draft to RFC, and OpenSSL to adopt ECH) but I thought I'd raise this issue to have it in the tracker.\r\n\r\n### What are you trying to do?\r\n\r\nUse ECH with HAProxy\r\n\r\n### Output of `haproxy -vv`\r\n\r\n```plain\r\nHAProxy version 2.7-dev8-7941ead+mangadex-cd2a7ce 2022-11-01T14:10+00:00 - https://haproxy.org/\r\nStatus: development branch - not safe for use in production.\r\nKnown bugs: https://github.com/haproxy/haproxy/issues?q=is:issue+is:open\r\nRunning on: Linux 5.4.143-1-pve #1 SMP PVE 5.4.143-1 (Tue, 28 Sep 2021 09:10:37 +0200) x86_64\r\nBuild options :\r\n TARGET = linux-glibc\r\n CPU = generic\r\n CC = cc\r\n CFLAGS = -O2 -ggdb3 -gdwarf-4 -Wall -Wextra -Wundef -Wdeclaration-after-statement -Wfatal-errors -Wtype-limits -Wshift-negative-value -Wnull-dereference -fwrapv -Wno-unknown-warning-option -Wno-address-of-packed-member -Wno-unused-label -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered -Wno-missing-field-initializers -Wno-cast-function-type -Wno-string-plus-int -Wno-atomic-alignment -DMAX_SESS_STKCTR=5\r\n OPTIONS = USE_PCRE2=1 USE_PCRE2_JIT=1 USE_STATIC_PCRE2=1 USE_LIBCRYPT=1 USE_OPENSSL=1 USE_LUA=1 USE_SLZ=1 USE_TFO=1 USE_NS=1 USE_SYSTEMD=1 USE_QUIC=1 USE_PROMEX=1\r\n DEBUG = -DDEBUG_MEMORY_POOLS -DDEBUG_STRICT\r\n\r\nFeature list : +EPOLL -KQUEUE +NETFILTER -PCRE -PCRE_JIT +PCRE2 +PCRE2_JIT +POLL +THREAD -PTHREAD_EMULATION +BACKTRACE -STATIC_PCRE +STATIC_PCRE2 +TPROXY +LINUX_TPROXY +LINUX_SPLICE +LIBCRYPT +CRYPT_H -ENGINE +GETADDRINFO +OPENSSL +LUA +ACCEPT4 -CLOSEFROM -ZLIB +SLZ +CPU_AFFINITY +TFO +NS +DL +RT -DEVICEATLAS -51DEGREES -WURFL +SYSTEMD -OBSOLETE_LINKER +PRCTL -PROCCTL +THREAD_DUMP -EVPORTS -OT +QUIC +PROMEX -MEMORY_PROFILING +SHM_OPEN\r\n\r\nDefault settings :\r\n bufsize = 16384, maxrewrite = 1024, maxpollevents = 200\r\n\r\nBuilt with multi-threading support (MAX_TGROUPS=16, MAX_THREADS=256, default=8).\r\nBuilt with OpenSSL version : OpenSSL 1.1.1q+quic-mangadex-cd2a7ce 1 Nov 2022\r\nRunning on OpenSSL version : OpenSSL 1.1.1q+quic-mangadex-cd2a7ce 1 Nov 2022\r\nOpenSSL library supports TLS extensions : yes\r\nOpenSSL library supports SNI : yes\r\nOpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3\r\nBuilt with Lua version : Lua 5.3.6\r\nBuilt with the Prometheus exporter as a service\r\nBuilt with network namespace support.\r\nSupport for malloc_trim() is enabled.\r\nBuilt with libslz for stateless compression.\r\nCompression algorithms supported : identity(\"identity\"), deflate(\"deflate\"), raw-deflate(\"deflate\"), gzip(\"gzip\")\r\nBuilt with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND\r\nBuilt with PCRE2 version : 10.40 2022-04-14\r\nPCRE2 library supports JIT : yes\r\nEncrypted password support via crypt(3): yes\r\nBuilt with clang compiler version 14.0.6\r\n\r\nAvailable polling systems :\r\n epoll : pref=300, test result OK\r\n poll : pref=200, test result OK\r\n select : pref=150, test result OK\r\nTotal: 3 (3 usable), will use epoll.\r\n\r\nAvailable multiplexer protocols :\r\n(protocols marked as \u003cdefault\u003e cannot be specified using 'proto' keyword)\r\n quic : mode=HTTP side=FE mux=QUIC flags=HTX|NO_UPG|FRAMED\r\n h2 : mode=HTTP side=FE|BE mux=H2 flags=HTX|HOL_RISK|NO_UPG\r\n fcgi : mode=HTTP side=BE mux=FCGI flags=HTX|HOL_RISK|NO_UPG\r\n h1 : mode=HTTP side=FE|BE mux=H1 flags=HTX|NO_UPG\r\n \u003cdefault\u003e : mode=HTTP side=FE|BE mux=H1 flags=HTX\r\n none : mode=TCP side=FE|BE mux=PASS flags=NO_UPG\r\n \u003cdefault\u003e : mode=TCP side=FE|BE mux=PASS flags=\r\n\r\nAvailable services : prometheus-exporter\r\nAvailable filters :\r\n [BWLIM] bwlim-in\r\n [BWLIM] bwlim-out\r\n [CACHE] cache\r\n [COMP] compression\r\n [FCGI] fcgi-app\r\n [SPOE] spoe\r\n [TRACE] trace\r\n```\r\n","author":{"url":"https://github.com/Tristan971","@type":"Person","name":"Tristan971"},"datePublished":"2022-11-12T09:29:13.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":77},"url":"https://github.com/1924/haproxy/issues/1924"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:5ec4c713-af26-f56f-7cb5-3753975df818 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | ACDA:37764A:A6A626:DEC1B5:6A4C4AFE |
| html-safe-nonce | 1b4c4ec62106d4015b69b41597f1469c2a3125ea642c5d9967c34d8de07514e5 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQ0RBOjM3NzY0QTpBNkE2MjY6REVDMUI1OjZBNEM0QUZFIiwidmlzaXRvcl9pZCI6IjkxNTkxNTg4NjMwNjM5NjAzMTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 4c09692541265c1f5700f2e91b67e5a6a6a7c85e8168b19b5d54aea3c0855e09 |
| hovercard-subject-tag | issue:1446352388 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/haproxy/haproxy/1924/issue_layout |
| twitter:image | https://opengraph.githubassets.com/ba71f7ee84939f6ab0a0b76513d6d5c7e12c8da7a862c47794b3d5f735b51abc/haproxy/haproxy/issues/1924 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/ba71f7ee84939f6ab0a0b76513d6d5c7e12c8da7a862c47794b3d5f735b51abc/haproxy/haproxy/issues/1924 |
| og:image:alt | Your Feature Request ECH (Encrypted client hello) is a developing specification for encrypting the original client hello in an HTTP1.1/HTTP2 context. The main purpose is making SNI sniffing impossi... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | Tristan971 |
| hostname | github.com |
| expected-hostname | github.com |
| None | 3d11bb817438277de2a940854450e83a7d32b6aeb5014e9e6b00a6423900251c |
| turbo-cache-control | no-preview |
| go-import | github.com/haproxy/haproxy git https://github.com/haproxy/haproxy.git |
| octolytics-dimension-user_id | 38220289 |
| octolytics-dimension-user_login | haproxy |
| octolytics-dimension-repository_id | 128791889 |
| octolytics-dimension-repository_nwo | haproxy/haproxy |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 128791889 |
| octolytics-dimension-repository_network_root_nwo | haproxy/haproxy |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 65d78903193f110d7a9d1f8587c6dc3cb911aae0 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width