Annotation of embedaddon/curl/docs/ESNI.md, revision 1.1.1.1
1.1 misho 1: # TLS: ESNI support in curl and libcurl
2:
3: ## Summary
4:
5: **ESNI** means **Encrypted Server Name Indication**, a TLS 1.3
6: extension which is currently the subject of an
7: [IETF Draft][tlsesni].
8:
9: This file is intended to show the latest current state of ESNI support
10: in **curl** and **libcurl**.
11:
12: At end of August 2019, an [experimental fork of curl][niallorcurl],
13: built using an [experimental fork of OpenSSL][sftcdopenssl], which in
14: turn provided an implementation of ESNI, was demonstrated
15: interoperating with a server belonging to the [DEfO
16: Project][defoproj].
17:
18: Further sections here describe
19:
20: - resources needed for building and demonstrating **curl** support
21: for ESNI,
22:
23: - progress to date,
24:
25: - TODO items, and
26:
27: - additional details of specific stages of the progress.
28:
29: ## Resources needed
30:
31: To build and demonstrate ESNI support in **curl** and/or **libcurl**,
32: you will need
33:
34: - a TLS library, supported by **libcurl**, which implements ESNI;
35:
36: - an edition of **curl** and/or **libcurl** which supports the ESNI
37: implementation of the chosen TLS library;
38:
39: - an environment for building and running **curl**, and at least
40: building **OpenSSL**;
41:
42: - a server, supporting ESNI, against which to run a demonstration
43: and perhaps a specific target URL;
44:
45: - some instructions.
46:
47: The following set of resources is currently known to be available.
48:
49: | Set | Component | Location | Remarks |
50: |:-----|:-------------|:------------------------------|:-------------------------------------------|
51: | DEfO | TLS library | [sftcd/openssl][sftcdopenssl] | Tag *esni-2019-08-30* avoids bleeding edge |
52: | | curl fork | [niallor/curl][niallorcurl] | Tag *esni-2019-08-30* likewise |
53: | | instructions | [ESNI-README][niallorreadme] | |
54:
55: ## Progress
56:
57: ### PR 4011 (Jun 2019) expected in curl release 7.67.0 (Oct 2019)
58:
59: - Details [below](#pr4011);
60:
61: - New **curl** feature: `CURL_VERSION_ESNI`;
62:
63: - New configuration option: `--enable-esni`;
64:
65: - Build-time check for availability of resources needed for ESNI
66: support;
67:
68: - Pre-processor symbol `USE_ESNI` for conditional compilation of
69: ESNI support code, subject to configuration option and
70: availability of needed resources.
71:
72: ## TODO
73:
74: - (next PR) Add libcurl options to set ESNI parameters.
75:
76: - (next PR) Add curl tool command line options to set ESNI parameters.
77:
78: - (WIP) Extend DoH functions so that published ESNI parameters can be
79: retrieved from DNS instead of being required as options.
80:
81: - (WIP) Work with OpenSSL community to finalize ESNI API.
82:
83: - Track OpenSSL ESNI API in libcurl
84:
85: - Identify and implement any changes needed for CMake.
86:
87: - Optimize build-time checking of available resources.
88:
89: - Encourage ESNI support work on other TLS/SSL backends.
90:
91: ## Additional detail
92:
93: ### PR 4011
94:
95: **TLS: Provide ESNI support framework for curl and libcurl**
96:
97: The proposed change provides a framework to facilitate work to
98: implement ESNI support in curl and libcurl. It is not intended
99: either to provide ESNI functionality or to favour any particular
100: TLS-providing backend. Specifically, the change reserves a
101: feature bit for ESNI support (symbol `CURL_VERSION_ESNI`),
102: implements setting and reporting of this bit, includes dummy
103: book-keeping for the symbol, adds a build-time configuration
104: option (`--enable-esni`), provides an extensible check for
105: resources available to provide ESNI support, and defines a
106: compiler pre-processor symbol (`USE_ESNI`) accordingly.
107:
108: Proposed-by: @niallor (Niall O'Reilly)\
109: Encouraged-by: @sftcd (Stephen Farrell)\
110: See-also: [this message](https://curl.haxx.se/mail/lib-2019-05/0108.html)
111:
112: Limitations:
113: - Book-keeping (symbols-in-versions) needs real release number, not 'DUMMY'.
114:
115: - Framework is incomplete, as it covers autoconf, but not CMake.
116:
117: - Check for available resources, although extensible, refers only to
118: specific work in progress ([described
119: here](https://github.com/sftcd/openssl/tree/master/esnistuff)) to
120: implement ESNI for OpenSSL, as this is the immediate motivation
121: for the proposed change.
122:
123: ## References
124:
125: Cloudflare blog: [Encrypting SNI: Fixing One of the Core Internet Bugs][corebug]
126:
127: Cloudflare blog: [Encrypt it or lose it: how encrypted SNI works][esniworks]
128:
129: IETF Draft: [Encrypted Server Name Indication for TLS 1.3][tlsesni]
130:
131: ---
132:
133: [tlsesni]: https://datatracker.ietf.org/doc/draft-ietf-tls-esni/
134: [esniworks]: https://blog.cloudflare.com/encrypted-sni/
135: [corebug]: https://blog.cloudflare.com/esni/
136: [defoproj]: https://defo.ie/
137: [sftcdopenssl]: https://github.com/sftcd/openssl/
138: [niallorcurl]: https://github.com/niallor/curl/
139: [niallorreadme]: https://github.com/niallor/curl/blob/master/ESNI-README.md
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>