CURLINFO\_CERTINFO(3) Library Functions Manual CURLINFO\_CERTINFO(3)

# [NAME](#NAME)

CURLINFO\_CERTINFO - TLS certificate chain

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,


                           struct curl_certinfo **chainp);
```

# [DESCRIPTION](#DESCRIPTION)

Pass a pointer to a *struct curl\_certinfo \** and it is set to point to a struct that holds info about the server's certificate chain, assuming you had [*CURLOPT\_CERTINFO(3)*](/man/os/curl/CURLOPT_CERTINFO.3) enabled when the request was made.

```
struct curl_certinfo {


  int num_of_certs;


  struct curl_slist **certinfo;
};
```

The *certinfo* struct member is an array of linked lists of certificate information. The *num\_of\_certs* struct member is the number of certificates which is the number of elements in the array. Each certificate's list has items with textual information in the format "name:content" such as "Subject:Foo", "Issuer:Bar", etc. The items in each list varies depending on the SSL backend and the certificate.

# [PROTOCOLS](#PROTOCOLS)

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

This option works only with the following TLS backends: GnuTLS, OpenSSL, Rustls and Schannel

# [EXAMPLE](#EXAMPLE)

```
int main(void)
{


  CURL *curl = curl_easy_init();


  if(curl) {


    CURLcode result;


    curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");


    /* connect to any HTTPS site, trusted or not */


    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);


    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);


    curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);


    result = curl_easy_perform(curl);


    if(result == CURLE_OK) {


      int i;


      struct curl_certinfo *ci;


      result = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);


      if(result == CURLE_OK) {


        printf("%d certs!\n", ci->num_of_certs);


        for(i = 0; i < ci->num_of_certs; i++) {


          struct curl_slist *slist;


          for(slist = ci->certinfo[i]; slist; slist = slist->next)


            printf("%s\n", slist->data);


        }


      }


    }


    curl_easy_cleanup(curl);


  }
}
```

See also the *certinfo.c* example.

# [HISTORY](#HISTORY)

GnuTLS support added in 7.42.0. Schannel support added in 7.50.0. mbedTLS support added in 8.9.0.

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.19.1

# [RETURN VALUE](#RETURN_VALUE)

[*curl\_easy\_getinfo(3)*](/man/os/curl/curl_easy_getinfo.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)*](/man/os/curl/libcurl-errors.3).

# [SEE ALSO](#SEE_ALSO)

[**CURLINFO\_CAPATH**(3)](/man/os/curl/CURLINFO_CAPATH.3), [**curl\_easy\_getinfo**(3)](/man/os/curl/curl_easy_getinfo.3), [**curl\_easy\_setopt**(3)](/man/os/curl/curl_easy_setopt.3)

2026-10-31 libcurl

---

Document: CURLINFO_CERTINFO(3) from curl 8.23.0-r3 (Chainguard OS)
Source: https://github.com/curl/curl.git
