Использование PKCS # 12 импортированного клиентского сертификата в libcurl

Используя libcurl, я в настоящее время сталкиваюсь с ошибкой подключения SSL (CURLE_SSL_CONNECT_ERROR, возвращаемой curl_easy_perform, «ошибка подключения SSL», возвращаемой curl_easy_strerror) при попытке использовать клиентский сертификат, предоставленный мне в формате p12.
Я уже нашел много ресурсов на эту тему, но ни одно из предложенных решений не помогло мне.
В настоящее время я запускаю свой код в Visual Studio 2017 в Windows 10, но он нацелен на межплатформенность.

Вот что я сделал до сих пор:

  1. Сгенерируйте сертификат PEM из файла p12:

    openssl pkcs12 -in * .p12 -out crt.pem -clcerts -nokeys

  2. Сгенерируйте ключ PEM из файла p12:

    openssl pkcs12 -in * .p12 -out key.pem -nocerts -nodes

Мой код C ++ выглядит так:

curl_easy_setopt( vCurl, CURLOPT_URL,               vURL.c_str()    );
curl_easy_setopt( vCurl, inMethod,                  1L              );
curl_easy_setopt( vCurl, CURLOPT_PORT,              inPort          );
curl_easy_setopt( vCurl, CURLOPT_SSL_VERIFYPEER,    0               );
curl_easy_setopt( vCurl, CURLOPT_FOLLOWLOCATION,    1L              );

curl_easy_setopt( vCurl, CURLOPT_SSLCERTTYPE, "PEM" );
curl_easy_setopt( vCurl, CURLOPT_SSLCERT,     "/absolute/path/crt.pem"  );
curl_easy_setopt( vCurl, CURLOPT_SSLKEYTYPE,  "PEM" );
curl_easy_setopt( vCurl, CURLOPT_SSLKEY,      "/absolute/path/key.pem"  );

curl_easy_setopt( vCurl, CURLOPT_WRITEFUNCTION, CurlWrite_CallbackFunc_StdString );
curl_easy_setopt( vCurl, CURLOPT_WRITEDATA, &vResponse );

vCurlResult = curl_easy_perform( vCurl );

string vDetails = curl_easy_strerror(vCurlResult);
curl_easy_getinfo ( vCurl, CURLINFO_RESPONSE_CODE, &vHttpCode );

Это приводит к ошибке, описанной выше. Я немного очистил код, чтобы он был более сфокусирован на проблемной части, но я не думаю, что я забыл включить что-то важное. Также обратите внимание, что это часть моей личной оболочки CURL, которую я уже широко использовал, в том числе для URL-адресов HTTPS, и она работает должным образом помимо этой проблемы управления сертификатами клиента.

Кроме того, я проанализировал сообщения, которыми обменивались во время рукопожатия с Wireshark, и клиент, похоже, не отправляет свой сертификат: указанная длина сертификата равна 0.

Ты хоть представляешь, что я могу попробовать? Может быть, какая-то проблема с опциями CURL, которые я использую? Или некоторые варианты, которые я должен использовать?
Спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector