2015-02-19 1 views
2

У меня возникла проблема с получением сертификата для работы с libcurl.Проверка подлинности сертификата CA с использованием libcurl

C++ код:

#include <stdio.h> 
#include <curl/curl.h> 
int main(void) 
{ 
    CURL *curl; 
    CURLcode res; 
    // const char* szURL = "https://www.google.se/"; 
    const char* szURL = "https://api-sandbox.oanda.com/"; 

    curl_global_init(CURL_GLOBAL_DEFAULT); 
    curl = curl_easy_init(); 
    if(curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, szURL); 

    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1); 
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1); 
    curl_easy_setopt(curl, CURLOPT_CAINFO, "./ca.crt"); 

    /* Perform the request, res will get the return code */ 
    res = curl_easy_perform(curl); 

    /* Check for errors */ 
    if(res != CURLE_OK) 
     fprintf(stderr, "curl_easy_perform() failed: %s\n", 
      curl_easy_strerror(res)); 

    /* always cleanup */ 
    curl_easy_cleanup(curl); 
    } 

    curl_global_cleanup(); 
    return 0; 
} 

Файл ca.crt это поместили в той же папке, как мой пример программы, и файл выглядит следующим образом:

----- НАЧАТЬ CERTIFICATE-- --- /* МНОГО символов и цифр */ ----- END CERTIFICATE -----

содержимое этого файла я извлеченной, выполнив:

openssl s_client -connect api-sandbox.oanda.com:443 > logfile 

Я тогда скопировал-вставлял ---- BEGIN CERTIFICATE ----- ..... ---- END CERTIFICATE ----- часть в пустой файл и сохранила его как ca. элт.

Программа печатает:

curl_easy_perform() failed: Peer certificate cannot be authenticated with given CA certificates 

Я использую MinGW 64-бит (г ++ компилятор) на Windows 8. Что мне не хватает?

Я был в состоянии сделать запрос к https://www.google.se/, используя ca-bundle, который был сгенерирован VB-скриптом, который поставляется с пакетом разработки libcurl. По-видимому, это скрипт, который

Скрипт для извлечения certdata.txt с сайта Mozilla.org и создать «* CA-bundle.crt для использования с OpenSSL/Libcurl/Libcurl привязок

Спасибо за любые указатели ,

ответ

0

Я решил. Я скачал этот файл: https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt

Похоже, что этот файл содержит сертификат от Thawte Server CA. При выполнении команды OpenSSL мы могли видеть:

i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA 

Это намекнули Thawte. Код, который я опубликовал выше, действительно был прав, кажется, что сертификат неверен. Почему это я не знаю (кто-нибудь со знанием в инструменте openssl: не стесняйтесь публиковать ответ на этот вопрос).

 Смежные вопросы

  • Нет связанных вопросов^_^