CURLOPT_PROXY_TLS13_CIPHERS(3)
π CURLOPT_PROXY_TLS13_CIPHERS(3) π
ok so this is a page from the Library Functions Manual and bestie, it's literally about picking which cipher suites your proxy TLS 1.3 connection gets to use. yes, we're going β¨ cryptographic β¨ today.
π NAME π
CURLOPT_PROXY_TLS13_CIPHERS β the cipher suites for your proxy's TLS 1.3 connection, no cap
π¦ SYNOPSIS π¦
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLS13_CIPHERS,
char *list);
πΈ DESCRIPTION πΈ
okay so you're gonna pass a char pointer, and it points at a null-terminated string holding the list of cipher suites you wanna use for the TLS 1.3 connection to a proxy. the list has to be syntactically correct β like, it literally consists of one or more cipher suite strings separated by colons. that's the whole vibe check.
for setting TLS 1.2 (1.1, 1.0) ciphers, bestie, that's a different option: CURLOPT_PROXY_SSL_CIPHER_LIST(3) π«Ά
a valid example of a cipher list is:
"TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256"
you can find more details about cipher lists at this URL:
https://curl.se/docs/ssl-ciphers.html
the application does not have to keep the string around after setting this option β so you can let it go, it's fine, it's free π
using this option multiple times makes the last set string override the previous ones. set it to NULL to disable its use again. iconic behavior honestly.
β¨ DEFAULT β¨
NULL β which means use the internal built-in list
π PROTOCOLS π
this functionality affects all TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
this option works only with the following TLS backends: OpenSSL, Rustls, mbedTLS and wolfSSL π
π EXAMPLE π
int main(void)
{
CURL *curl = curl_easy_init();
if(curl) {
CURLcode result;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(curl, CURLOPT_PROXY_TLS13_CIPHERS,
"TLS_CHACHA20_POLY1305_SHA256");
result = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
π§ HISTORY π§
- OpenSSL support added in
7.61.0, available when built with OpenSSL >=1.1.1. - LibreSSL support added in
8.3.0, available when built with LibreSSL >=3.4.1. - wolfSSL support added in
8.10.0. - mbedTLS support added in
8.10.0, available when built with mbedTLS >=3.6.0. - Rustls support added in
8.10.0.
before curl 8.10.0, with mbedTLS or wolfSSL, TLS 1.3 cipher suites were set by using the CURLOPT_PROXY_SSL_CIPHER_LIST(3) option. so like, keep that in mind if you're time-traveling π°οΈ
β AVAILABILITY β
added in curl 7.61.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_PROXY_SSLVERSION(3)CURLOPT_PROXY_SSL_CIPHER_LIST(3)CURLOPT_SSLVERSION(3)CURLOPT_SSL_CIPHER_LIST(3)CURLOPT_TLS13_CIPHERS(3)
π and that's the whole page bestie, go forth and cipher responsibly
ok bye ily! this was libcurl, dated 2026-10-12 β mwah π π
π¦ where this page comes from
- fedora 44: libcurl-devel 8.18.0-14.fc44 Β· curl
- fedora 44: libcurl-devel 8.18.0-14.fc44 Β· curl
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms