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