manpagez: man pages & more
man CURLOPT_ECH(3)
Home | html | info | man
CURLOPT_ECH(3)             Library Functions Manual             CURLOPT_ECH(3)


NAME

       CURLOPT_ECH - configuration for Encrypted Client Hello


SYNOPSIS

       #include <curl/curl.h>

       CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ECH, char *config);


DESCRIPTION

       This feature is experimental and may change before it is considered
       stable. We advise against using it in production.

       ECH is only compatible with TLSv1.3.

       Pass a string that specifies configuration details for ECH. In all
       cases, if ECH is attempted, it may fail for various reasons. The
       keywords supported are:

       false  Turns off ECH.

       grease Instructs client to emit a GREASE ECH extension. (The connection
              fails if ECH is attempted but fails.)

       true   Instructs client to attempt ECH, if possible, but to not fail if
              attempting ECH is not possible.

       hard   Instructs client to attempt ECH and fail if attempting ECH is
              not possible.

       ecl:<base64-value>
              If the string starts with ecl: then the remainder of the string
              should be a base64-encoded ECHConfigList that is used for ECH
              rather than attempting to download such a value from the DNS.

       pn:<name>
              If the string starts with pn: then the remainder of the string
              should be a DNS/hostname that is used to over-ride the
              public_name field of the ECHConfigList that is used for ECH.

       The application does not have to keep the string around after setting
       this option.

       Using this option multiple times makes the last set string override the
       previous ones. Set it to NULL or "false" to disable its use again.


DEFAULT

       NULL, meaning ECH is disabled.


PROTOCOLS

       This functionality affects  all TLS based protocols: HTTPS, FTPS,
       IMAPS, POP3S, SMTPS etc. only

       This option works only with the following TLS backends: OpenSSL, Rustls
       and wolfSSL


EXAMPLE

       int main(void)
       {
         CURL *curl = curl_easy_init();

         static const char *config =
           "ecl:AED+DQA87wAgACB/RuzUCsW3uBbSFI7mzD63TUXpI8sGDTnFTbFCDpa+"
           "CAAEAAEAAQANY292ZXIuZGVmby5pZQAA";
         if(curl) {
           CURLcode result;
           curl_easy_setopt(curl, CURLOPT_ECH, config);
           result = curl_easy_perform(curl);
           curl_easy_cleanup(curl);
         }
       }


AVAILABILITY

       Added in curl 8.8.0


RETURN VALUE

       curl_easy_setopt(3) returns a CURLcode indicating success or error.

       CURLE_OK (0) means everything was OK, non-zero means an error occurred,
       see libcurl-errors(3).


SEE ALSO

       CURLOPT_DOH_URL(3)

libcurl                           2026-09-03                    CURLOPT_ECH(3)

curl 8.22.0 - Generated Sat Sep 5 08:07:24 CDT 2026
© manpagez.com 2000-2026
Individual documents may contain additional copyright information.