Annotation of embedaddon/curl/docs/ESNI.md, revision 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>