Использовать самоподписанный сертификат libcurl +: невозможно получить сертификат эмитента - PullRequest
0 голосов
/ 23 октября 2019

1. Почему я использую код libcurl, соединение не удалось вернуть, невозможно получить сертификат эмитента, но команда curl может подключиться нормально ???

2. Моя среда SSL-сертификатов:

  • Сервер использует трехуровневый сертификат и является самозаверяющим сертификатом.
  • Я использую сертификаты CA (/tmp/ca.pem)и сертификат второго уровня (/tmp/ca_sub_2.pem) также самоподписан.

3. Моя версия SDK libcurl - curl-7.65.3

4. Моя версия SDK openssl - openssl-1.1.1a

5. Мой тестовый код (написанный на языке c):

curl = curl_easy_init(); 

if(curl!=NULL){  
    printf("Usage:file<%s>;\n",argv[1]);  
    curl_easy_setopt(curl,CURLOPT_URL,argv[1]);  
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,&save_response_callback);  
    curl_easy_setopt(curl,CURLOPT_WRITEDATA,&response);  
    curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L); 
    curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0L);  
    curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);  
    curl_easy_setopt(curl,CURLOPT_POST,1L); 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, argv[2]);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(argv[2]));
    curl_easy_setopt(curl,CURLOPT_CAPATH,"/tmp/");  
    curl_easy_setopt(curl,CURLOPT_CAINFO,"/tmp/ca_sub_2.pem");  
    curl_easy_setopt(curl,CURLOPT_CERTINFO,1L);  
    curl_easy_setopt(curl,CURLOPT_TIMEOUT,30);  

    res = curl_easy_perform(curl);  
    if(res != CURLE_OK){  
           printf("curl_wasy_perform error = %s(%d)\n",curl_easy_strerror(res), res);  
    }  

    curl_easy_cleanup(curl);  
}

Я хочу использовать libcurl + самозаверяющий сертификат для подключения к серверу https, сбой подключения и возврат:

  • Успешно заданы местоположения проверки сертификата:
  • CAfile: /tmp/ca_sub_2.pem CApath: / tmp /
  • Проблема с сертификатом SSL: невозможно получить сертификат эмитента
  • Закрытие соединения 0

6. Я использую команду curl test connect ok:

  • версия команды curl: curl 7.47.0
  • Команда curl: curl --cacert /tmp/ca_sub_2.pem -d post_msg post_url -V
...