CURLOPT_PROXY_SSL_OPTIONS(3)
π CURLOPT_PROXY_SSL_OPTIONS(3) β¨
okay bestie, welcome to the libcurl manual, Library Functions Manual section, and today's main character is CURLOPT_PROXY_SSL_OPTIONS β literally the vibe-check dial for how libcurl does SSL with your HTTPS proxy. π
πΈ NAME πΈ
CURLOPT_PROXY_SSL_OPTIONS β HTTPS proxy SSL behavior options. that's it, that's the whole name, and honestly? iconic.
β¨ SYNOPSIS β¨
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS,
long bitmask);
π¦ DESCRIPTION π¦
so you pass a long that's a bitmask, and it tells libcurl all about the specific SSL behaviors you want. it's giving "settings menu but make it binary." here are the available bits, no cap:
π the bits
CURLSSLOPT_ALLOW_BEASTβ tells libcurl to not attempt any workarounds for a security flaw in the SSL3 and TLS1.0 protocols. if you don't use this option, or this bit is set to0, the SSL layer libcurl uses may use a work-around for this flaw β which honestly might cause interoperability problems with some (older) SSL implementations. β οΈ WARNING: avoiding this work-around lessens the security, and by setting this option to1you are asking for exactly that. yes, you read that right. this option is only supported for Secure Transport and OpenSSL.CURLSSLOPT_NO_REVOKEβ tells libcurl to disable certificate revocation checks for those SSL backends where such behavior is present. this one's only supported for Schannel (the native Windows SSL library), with an exception in the case of Windows' Untrusted Publishers block list, which it seems cannot be bypassed. π rude.CURLSSLOPT_NO_PARTIALCHAINβ tells libcurl to not accept "partial" certificate chains, which it otherwise does by default. this option fails the certificate verification if the chain ends with an intermediate certificate and not with a root cert. π- works with OpenSSL and its forks (LibreSSL, BoringSSL, etc). (Added in
7.68.0) - works with Schannel if the user specified certificates to verify the peer. (Added in
8.15.0)
- works with OpenSSL and its forks (LibreSSL, BoringSSL, etc). (Added in
CURLSSLOPT_REVOKE_BEST_EFFORTβ tells libcurl to ignore certificate revocation checks in case of missing or offline distribution points, for those SSL backends where such behavior is present. only supported for Schannel (the native Windows SSL library). if you combine it withCURLSSLOPT_NO_REVOKE, the latter takes precedence. (Added in7.70.0)CURLSSLOPT_NATIVE_CAβ tell libcurl to use the operating system's native CA store for certificate verification. this option is independent of other CA certificate locations set at run time or build time β those locations are searched in addition to the native CA store. π«Ά- works with wolfSSL on Windows, Linux (Debian, Ubuntu, Gentoo, Fedora, RHEL), macOS, Android and iOS (added in
8.3.0); with GnuTLS (added in8.5.0) and with OpenSSL and its forks (LibreSSL, BoringSSL, etc) on Windows (Added in7.71.0).
- works with wolfSSL on Windows, Linux (Debian, Ubuntu, Gentoo, Fedora, RHEL), macOS, Android and iOS (added in
CURLSSLOPT_AUTO_CLIENT_CERTβ tell libcurl to automatically locate and use a client certificate for authentication, when requested by the server. only supported for Schannel (the native Windows SSL library). prior to7.77.0this was the default behavior in libcurl with Schannel. and listen β since the server can request any certificate that supports client authentication in the OS certificate store, it could be a privacy violation and unexpected. π (Added in7.77.0)
π DEFAULT π
0
π PROTOCOLS π
this functionality affects all TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. π
all TLS backends support this option. slay.
π₯ 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, "https://proxy.example");
/* weaken TLS only for use with silly proxies */
curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS,
CURLSSLOPT_ALLOW_BEAST | CURLSSLOPT_NO_REVOKE);
result = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
look at that comment. "weaken TLS only for use with silly proxies." the honesty. the audacity. we stan. π
β HISTORY β
CURLSSLOPT_* macros became long types in 8.15.0. prior to this version, a long cast was necessary when passed to curl_easy_setopt(3). glow-up era fr fr.
π§ AVAILABILITY π§
Added in curl 7.52.0. vintage but still relevant bestie.
π RETURN VALUE π
curl_easy_setopt(3) returns a CURLcode indicating success or error. CURLE_OK (0) means everything was OK, and 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)
go read them, iykyk π¦
and that's the whole page, bestie β brought to you by libcurl, dated 2026-10-12, and yes the header said CURLOPT_PROXY_SSL_OPTIONS(3) in section 3 all along. 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