1
- # TLS: ESNI support in curl and libcurl
1
+ # TLS: ECH support in curl and libcurl
2
2
3
3
## Summary
4
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 ] .
5
+ ** ECH ** means ** Encrypted Client Hello ** , a TLS 1.3 extension which is
6
+ currently the subject of an [ IETF Draft ] [ tlsesni ] . (ECH was formerly known as
7
+ ESNI) .
8
8
9
- This file is intended to show the latest current state of ESNI support
9
+ This file is intended to show the latest current state of ECH support
10
10
in ** curl** and ** libcurl** .
11
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 ] .
12
+ At end of August 2019, an [ experimental fork of curl] [ niallorcurl ] , built
13
+ using an [ experimental fork of OpenSSL] [ sftcdopenssl ] , which in turn provided
14
+ an implementation of ECH, was demonstrated interoperating with a server
15
+ belonging to the [ DEfO Project] [ defoproj ] .
17
16
18
17
Further sections here describe
19
18
20
19
- resources needed for building and demonstrating ** curl** support
21
- for ESNI ,
20
+ for ECH ,
22
21
23
22
- progress to date,
24
23
@@ -28,18 +27,18 @@ Further sections here describe
28
27
29
28
## Resources needed
30
29
31
- To build and demonstrate ESNI support in ** curl** and/or ** libcurl** ,
30
+ To build and demonstrate ECH support in ** curl** and/or ** libcurl** ,
32
31
you will need
33
32
34
- - a TLS library, supported by ** libcurl** , which implements ESNI ;
33
+ - a TLS library, supported by ** libcurl** , which implements ECH ;
35
34
36
- - an edition of ** curl** and/or ** libcurl** which supports the ESNI
35
+ - an edition of ** curl** and/or ** libcurl** which supports the ECH
37
36
implementation of the chosen TLS library;
38
37
39
38
- an environment for building and running ** curl** , and at least
40
39
building ** OpenSSL** ;
41
40
42
- - a server, supporting ESNI , against which to run a demonstration
41
+ - a server, supporting ECH , against which to run a demonstration
43
42
and perhaps a specific target URL;
44
43
45
44
- some instructions.
@@ -58,52 +57,49 @@ The following set of resources is currently known to be available.
58
57
59
58
- Details [ below] ( #pr4011 ) ;
60
59
61
- - New ** curl ** feature : ` CURL_VERSION_ESNI ` ;
60
+ - New configuration option : ` --enable-ech ` ;
62
61
63
- - New configuration option: ` --enable-esni ` ;
64
-
65
- - Build-time check for availability of resources needed for ESNI
62
+ - Build-time check for availability of resources needed for ECH
66
63
support;
67
64
68
- - Pre-processor symbol ` USE_ESNI ` for conditional compilation of
69
- ESNI support code, subject to configuration option and
65
+ - Pre-processor symbol ` USE_ECH ` for conditional compilation of
66
+ ECH support code, subject to configuration option and
70
67
availability of needed resources.
71
68
72
69
## TODO
73
70
74
- - (next PR) Add libcurl options to set ESNI parameters.
71
+ - (next PR) Add libcurl options to set ECH parameters.
75
72
76
- - (next PR) Add curl tool command line options to set ESNI parameters.
73
+ - (next PR) Add curl tool command line options to set ECH parameters.
77
74
78
- - (WIP) Extend DoH functions so that published ESNI parameters can be
75
+ - (WIP) Extend DoH functions so that published ECH parameters can be
79
76
retrieved from DNS instead of being required as options.
80
77
81
- - (WIP) Work with OpenSSL community to finalize ESNI API.
78
+ - (WIP) Work with OpenSSL community to finalize ECH API.
82
79
83
- - Track OpenSSL ESNI API in libcurl
80
+ - Track OpenSSL ECH API in libcurl
84
81
85
82
- Identify and implement any changes needed for CMake.
86
83
87
84
- Optimize build-time checking of available resources.
88
85
89
- - Encourage ESNI support work on other TLS/SSL backends.
86
+ - Encourage ECH support work on other TLS/SSL backends.
90
87
91
88
## Additional detail
92
89
93
90
### PR 4011
94
91
95
- ** TLS: Provide ESNI support framework for curl and libcurl**
92
+ ** TLS: Provide ECH support framework for curl and libcurl**
96
93
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.
94
+ The proposed change provides a framework to facilitate work to implement ECH
95
+ support in curl and libcurl. It is not intended either to provide ECH
96
+ functionality or to favour any particular TLS-providing backend. Specifically,
97
+ the change reserves a feature bit for ECH support (symbol
98
+ ` CURL_VERSION_ECH ` ), implements setting and reporting of this bit, includes
99
+ dummy book-keeping for the symbol, adds a build-time configuration option
100
+ (` --enable-ech ` ), provides an extensible check for resources available to
101
+ provide ECH support, and defines a compiler pre-processor symbol (` USE_ECH ` )
102
+ accordingly.
107
103
108
104
Proposed-by: @niallor (Niall O'Reilly)\
109
105
Encouraged-by: @sftcd (Stephen Farrell)\
@@ -117,7 +113,7 @@ Limitations:
117
113
- Check for available resources, although extensible, refers only to
118
114
specific work in progress ([ described
119
115
here] ( https://github.com/sftcd/openssl/tree/master/esnistuff ) ) to
120
- implement ESNI for OpenSSL, as this is the immediate motivation
116
+ implement ECH for OpenSSL, as this is the immediate motivation
121
117
for the proposed change.
122
118
123
119
## References
0 commit comments