CURLOPT_SSLCERTTYPE(3)

okay bestie, this is CURLOPT_SSLCERTTYPE(3) from the Library Functions Manual β€” brought to you by libcurl, and it's all about the type of your client SSL certificate. πŸ’…

πŸŽ€ NAME πŸŽ€

CURLOPT_SSLCERTTYPE β€” type of client SSL certificate. Short, sweet, iconic.

🌸 SYNOPSIS 🌸

First you include the header, then you call the function like this:

#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type);

πŸ’– DESCRIPTION πŸ’–

Okay so: you pass a pointer to a null-terminated string as the parameter, and that string should be the format of your certificate. ✨

Supported formats are "PEM" and "DER", except with Schannel. OpenSSL and Schannel support "P12" for PKCS#12-encoded files. GnuTLS supports P12 starting with curl 8.11.0.

Your application does not have to keep the string around after setting this option β€” set it, and you're free. 🫢

Using this option multiple times makes the last set string override the previous ones. Set it to NULL and it restores back to the internal default.

πŸ’œ DEFAULT πŸ’œ

"PEM" β€” that's the default, no cap.

πŸ¦‹ PROTOCOLS πŸ¦‹

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

This option works only with the following TLS backends: GnuTLS, OpenSSL, Schannel, mbedTLS and wolfSSL.

✨ EXAMPLE ✨

Here's the little main character snippet, exactly as it should be:

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_SSLCERT, "client.pem");
    curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
    curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
    curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
    result = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
}

πŸŽ€ AVAILABILITY πŸŽ€

Added in curl 7.9.3. A classic. πŸ’–

🌈 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 🫢


πŸ’– cute sign-off: source/version libcurl, date 2026-10-12, page CURLOPT_SSLCERTTYPE(3) β€” byeee, go set those cert types bestie πŸ’…βœ¨

πŸ“¦ where this page comes from