Взаимная аутентификация SSLv3 с использованием libcurl и смарт-карты
Мне нужна помощь в установлении канала связи для использования веб-сервиса с использованием SSLv3 с взаимной аутентификацией, libcurl и смарт-карты, которая будет хранить сертификат клиента, пару ключей и будет отвечать за подписи, шифрование и т. Д.
В целях тестирования без использования смарт-карты следующий краткий код работает без сбоев:
....
(SOAP message configurations)
....
curl_easy_setopt (curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
curl_easy_setopt (curl, CURLOPT_SSLVERSION, 3);
curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_easy_setopt (curl, CURLOPT_SSLCERT, "clientCertificateFile");
curl_easy_setopt (curl, CURLOPT_KEYPASSWD, "testPrivateKeyPass");
curl_easy_setopt (curl, CURLOPT_SSLKEY, "testPrivateKeyFile");
curl_easy_setopt (curl, CURLOPT_CAINFO, "CAcertificateFile");
curl_easy_setopt (curl, CURLOPT_URL, "URLtoWebService");
curl_easy_perform (curl);
После запуска этого кода я могу установить связь с помощью SSLv3 и получить ожидаемый ответ от веб-службы. Однако мне нужно установить этот безопасный канал с помощью смарт-карты. У меня есть свободный доступ к следующей информации:
- "clientCertificateFile" - хранится на смарт-карте в формате PEM. Это можно прочитать через функцию доступа.
- "CAcertificateFile" - хранится на диске в формате PEM. Это можно прочитать через функцию доступа.
- "URLtoWebService" - хранится в приложении.
"testPrivateKeyFile" и "testPrivateKeyPass" - это временные файлы, используемые только для тестирования и должны быть заменены смарт-картой.
Я сомневаюсь: как использовать смарт-карту для замены секретного ключа и пароля в процессе установки libcurl?
Смарт-карта не позволяет получить доступ к закрытому ключу, только к открытому ключу, как и ожидалось. Я могу отправить на смарт-карту данные для подписи или шифрования, используя закрытый ключ, и получить полученный буфер.
Есть ли способ перенаправить часть рукопожатия подключения SSLv3 для использования моей смарт-карты? Некоторые настройки в lib ssl или libcurl?
Спасибо за внимание!