gSOAP и OpenSSL на iPhone

это мой первый пост о stackoverflow. Надеюсь, я никому не мешаю ... :)
Я уже некоторое время работаю с gSOAP, подключающимся к http-webservice для моего приложения для iPhone. Теперь я пытаюсь перейти на https-webservice. Я включил openssl в проект и добавил compileflat -DWITH_OPENSSL. Build & Run работает, но, к сожалению, openssl не позволяет мне проверить сертификат веб-сервера.
Включив DEBUG-MODE, я обнаружил, что существует проблема с сертификатом веб-сервера:

Ошибка проверки SSL или предупреждение с сертификатом на глубине 1: невозможно получить сертификат локального эмитента сертификата / C = US / O = VeriSign, Inc./OU=Class 3 Public Primary Certification Authority subject / O = VeriSign Trust Network / OU = VeriSign, Inc./OU=VeriSign Международный сервер CA - класс 3 / OU = www.verisign.com / CPS Incorp.by Ref. ОТВЕТСТВЕННОСТЬ LTD. (C) 97 VeriSign

Проверка с помощью SSL Shoppers SSL Checker приводит к:

Сертификату должны доверять все основные веб-браузеры (установлены все правильные промежуточные сертификаты).

Есть идеи, как решить эту проблему?

BR

Мартин


person Martin W.    schedule 10.12.2010    source источник


Ответы (2)


ну иногда RTFM действительно помогает :)

Раздел 19.20 («Защищенные клиенты SOAP с HTTPS / SSL») гласит: «Чтобы отключить аутентификацию сервера в целях тестирования, используйте следующее:»

if (soap_ssl_client_context(&soap,
   SOAP_SSL_NO_AUTHENTICATION,
   NULL,
   NULL,
   NULL,
   NULL,
   NULL
   ))
{
   soap_print_fault(&soap, stderr);
   exit(1);
}

К сожалению, параметр -DSOAP_DEBUG по-прежнему читает «Ошибка проверки SSL или предупреждение с сертификатом на глубине 1: невозможно получить сертификат локального эмитента». Во всяком случае, сейчас он работает.

person Martin W.    schedule 16.12.2010

Отключение аутентификации - неправильное решение. Я подозреваю, что вы не устанавливаете путь к файлу сертификатов CA, который openssl использует для доверия CA.

soap_ssl_client_context (& soapObject, SOAP_SSL_DEFAULT, NULL, NULL, cacerts.pem, NULL, NULL))

вы можете получить cacerts.pem из Mozilla. Если ваше приложение позволяет подключаться только к одному веб-сайту, вам следует просто оставить хеш для центра сертификации, которым выдается сертификат веб-сайта, и удалить все ненужные CA из файла pem.

person vishalb    schedule 21.06.2016