xCode 9 - iOS 11: NSURLConnection - sendAsynchronousRequest не работает

Я только что загрузил последнюю версию xCode (9.0 beta (9M136h)).

Однако, когда я пытаюсь сделать запрос на мой сервер в симуляторе iOS 11 (используя NSURLConnection sendAsynchronousRequest), будет получена ошибка:

NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9807) NSURLConnection завершен с кодом ошибки -1202

Объект NSError содержит сообщение - @"NSLocalizedDescription": @"Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который притворяется" *** ", что может поставить под угрозу вашу конфиденциальную информацию".

Плис содержит:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

так что это не проблема в этом случае (я думаю)

Излишне говорить, что он работает в iOS 10/9/8

Какие-либо предложения?

Заранее спасибо!

Ответ 1

Для всех вас, кто получает эту ошибку в iOS 11, убедитесь, что вы работаете с действующим (защищенным) сертификатом на своем сервере.

В нашем случае сертификат не был достаточно строгим.

После того, как наш серверный парень интегрировал новый действующий сертификат, проблема исчезла.

Один из способов проверить, защищен ли сертификат, - это пройти мимо проблемной ссылки в браузере.

В результате вы можете увидеть, что соединение не защищено:

enter image description here

Ответ 2

Вы должны разрешить вашему приложению запускать соединения HTTP (no S). По умолчанию Apple разрешает только HTTPS:

  1. пойдите в свой info.plist

    here

  2. затем нажмите значок "плюс" на любом из них
  3. Найдите "Настройки безопасности приложения на транспорте" here
  4. щелкните маленькую стрелку влево и найдите "Разрешить произвольные нагрузки", по умолчанию установлено значение "НЕТ", чтобы изменить его на "ДА",

Ответ 3

Поскольку у вас неверная ошибка сертификата, я сделаю следующее предложение, основанное на моей личной практике безопасности.

Если вы все еще находитесь на своих условиях обслуживания со своим ЦС, попросите их выпустить для вас новый действующий сертификат.

Проверьте настройку Keychain и убедитесь, что сертификат CA отсутствует.

Кроме того, вы можете оформить свой собственный самозаверяющий сертификат для целей тестирования и добавить его в свой локальный Keychain в качестве привязки доверия. Поиск "как создать самоподписанный сертификат x509" вернет вам что-то полезное.