4c9768565e
enabling this feature with CURLOPT_CERTINFO for a request using SSL (HTTPS or FTPS), libcurl will gather lots of server certificate info and that info can then get extracted by a client after the request has completed with curl_easy_getinfo()'s CURLINFO_CERTINFO option. Linus Nielsen Feltzing helped me test and smoothen out this feature. Unfortunately, this feature currently only works with libcurl built to use OpenSSL. This feature was sponsored by networking4all.com - thanks!
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
/*****************************************************************************
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <curl/curl.h>
|
|
#include <curl/types.h>
|
|
#include <curl/easy.h>
|
|
|
|
static size_t wrfu(void *ptr, size_t size, size_t nmemb, void *stream)
|
|
{
|
|
return size * nmemb;
|
|
}
|
|
int main(int argc, char **argv)
|
|
{
|
|
CURL *curl;
|
|
CURLcode res;
|
|
|
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
|
|
|
curl = curl_easy_init();
|
|
if(curl) {
|
|
curl_easy_setopt(curl, CURLOPT_URL, "https://www.networking4all.com/");
|
|
|
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wrfu);
|
|
|
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
|
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
|
|
|
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
|
|
curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
|
|
|
|
res = curl_easy_perform(curl);
|
|
|
|
if(!res) {
|
|
struct curl_certinfo *ci = NULL;
|
|
|
|
res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
|
|
|
|
if(!res && ci) {
|
|
int i;
|
|
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);
|
|
}
|
|
|
|
curl_global_cleanup();
|
|
|
|
return 0;
|
|
}
|