HTTPS используя cURL, используя openssl с движком capi - PullRequest
3 голосов
/ 19 мая 2011

Я пытаюсь использовать https, используя cURL 7.21.1 с OpenSSL 1.0.0d, используя встроенный в OpenSSL механизм capi для проверки сертификатов, но он возвращает CURLE_SSL_CACERT (60) в curl_easy_perform ().

#include <openssl/conf.h>
#include <openssl/engine.h>
#include <openssl/ssl.h>
#define CURL_NO_OLDIES
#define CURL_STATICLIB
#include <curl.h>

// Don't forget libeay32.lib, ssleay32.lib, curl.lib
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "wldap32.lib")
#pragma comment(lib, "crypt32.lib")

int main(int argc, char* argv[])
{
    OPENSSL_no_config();
    ENGINE_load_capi();
    // Same effect, despite ok = 1 both times:
    // ENGINE* capi = ENGINE_by_id("capi");
    // int ok = ENGINE_init(capi);
    // ok = ENGINE_register_complete(capi);

    CURLcode e = curl_global_init(CURL_GLOBAL_DEFAULT);
    CURL* curl = curl_easy_init();

    e = curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com/");
    e = curl_easy_perform(curl); // returns CURLE_SSL_CACERT
    return 0;
}

Если я тестирую "openssl s_client -connect www.google.com:443" со следующей конфигурацией:

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
capi = capi_config

[capi_config]
engine_id = capi
init=1

на основе http://www.mail-archive.com/openssl-users@openssl.org/msg62249.html, я получаю:

verify error:num=20:unable to get local issuer certificate

Меня смущает то, что когда я впервые написал реальную программу, в которой происходит сбой, у нее была такая же ошибка, пока я не добавил ENGINE_load_capi (). Я хотел бы избежать использования пакета CA, поскольку сама программа может работать внутри случайных корпоративных сетей, и они могут использовать частные CA.

Ответы [ 2 ]

1 голос
/ 29 января 2014

Похоже, у OpenSSL есть проблема с поиском хранилища сертификатов по умолчанию? Следующий вопрос SO решил похожую ошибку, указав файл CA явно, но похоже, что вы хотели бы избежать этой конфигурации.

OpenSSL не может получить сертификат локального эмитента, если CAfile явно не указан

0 голосов
/ 23 сентября 2016

Может быть, вы можете попытаться добавить следующую строку в ваш файл, к которому у вас есть доступ к домену. curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, false);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...