Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
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  sup-
     ported 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 at-
	    tempting 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();

       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-08-27			  CURLOPT_ECH(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=CURLOPT_ECH&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help