CURLOPT_SSLVERSION(3)

πŸŽ€ NAME πŸŽ€

CURLOPT_SSLVERSION β€” preferred TLS/SSL version. This is the Library Functions Manual page for CURLOPT_SSLVERSION, bestie, and yes it's iconic. πŸ’…


✨ SYNOPSIS ✨

#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version);

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so bestie, you pass a long as the parameter to control which version range of SSL/TLS versions to use. No cap.

The SSL and TLS versions have typically developed from the most insecure version to be more and more secure in this order through history: SSL v2, SSLv3, TLS v1.0, TLS v1.1, TLS v1.2 and the most recent TLS v1.3. Literally a security glow-up timeline. ✨

Use one of the available defines for this purpose. The available options are:

  • CURL_SSLVERSION_DEFAULT β€” the default acceptable version range. The minimum acceptable version is by default TLS v1.2 since 8.16.0 (unless the TLS library has a stricter rule).
  • CURL_SSLVERSION_TLSv1 β€” TLS v1.0 or later
  • CURL_SSLVERSION_SSLv2 β€” SSL v2 - refused
  • CURL_SSLVERSION_SSLv3 β€” SSL v3 - refused
  • CURL_SSLVERSION_TLSv1_0 β€” TLS v1.0 or later
  • CURL_SSLVERSION_TLSv1_1 β€” TLS v1.1 or later
  • CURL_SSLVERSION_TLSv1_2 β€” TLS v1.2 or later
  • CURL_SSLVERSION_TLSv1_3 β€” TLS v1.3 or later

The maximum TLS version can be set by using one of the CURL_SSLVERSION_MAX_ macros below. It is also possible to OR one of the CURL_SSLVERSION_ macros with one of the CURL_SSLVERSION_MAX_ macros.

  • CURL_SSLVERSION_MAX_DEFAULT β€” The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL library is used. libcurl uses a sensible default maximum, which was TLS v1.2 up to before 7.61.0 and is TLS v1.3 since then - assuming the TLS library support it.
  • CURL_SSLVERSION_MAX_TLSv1_0 β€” The flag defines maximum supported TLS version as TLS v1.0.
  • CURL_SSLVERSION_MAX_TLSv1_1 β€” The flag defines maximum supported TLS version as TLS v1.1.
  • CURL_SSLVERSION_MAX_TLSv1_2 β€” The flag defines maximum supported TLS version as TLS v1.2.
  • CURL_SSLVERSION_MAX_TLSv1_3 β€” The flag defines maximum supported TLS version as TLS v1.3.

πŸ’– DEFAULT πŸ’–

CURL_SSLVERSION_DEFAULT


🌈 PROTOCOLS 🌈

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

All TLS backends support this option. Periodt. πŸ’…


πŸ“ EXAMPLE πŸ“

int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");

    /* ask libcurl to use TLS version 1.0 or later */
    curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

    /* Perform the request */
    curl_easy_perform(curl);
  }
}

🧚 HISTORY 🧚

  • SSLv2 is disabled by default since 7.18.1. Other SSL versions availability may vary depending on which backend libcurl has been built to use.
  • SSLv3 is disabled by default since 7.39.0.
  • SSLv2 and SSLv3 are refused completely since curl 7.77.0
  • Since 8.10.0 wolfSSL is fully supported. Before 8.10.0 the MAX macros were not supported with wolfSSL and the other macros did not set a minimum, but restricted the TLS version to only the specified one.
  • Rustls support added in 8.10.0.
  • CURL_SSLVERSION_* macros became long types in 8.16.0, prior to this version a long cast was necessary when passed to curl_easy_setopt(3).

πŸ‘‘ AVAILABILITY πŸ‘‘

Added in curl 7.1


πŸ’œ 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 🫢


This iconic manual page comes from libcurl, dated 2026-10-12. Stay secure and slay, bestie πŸ’–πŸ«Ά

πŸ“¦ where this page comes from