Подтвердить что ты не робот

KCFStreamErrorDomainSSL, -9802 при подключении к серверу по IP-адресу через HTTPS в iOS 9

У нас есть приложение iOS, которое подключается к нашему серверу через HTTPS. Когда приложение создано с новым SDK iOS 9 и запускается под iOS 9, возникает следующая ошибка:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

Приложение использует AFNetworking 1.3.4 с прикрепленными сертификатами. Проблема возникает, если я подключаюсь к серверу с его IP-адресом. Он работает, если я добавляю конфигурацию NSAllowsArbitraryLoads или подключаюсь к серверу с его доменным именем.

Разъем Tomcat настроен с помощью sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2".

Я попытался переопределить имя хоста, но он ничего не меняет.

Я еще не могу найти много официальной документации по ОВД. Возможно, соединение с IP-адресом не должно работать?

4b9b3361

Ответ 1

iOS9 требует, чтобы сервер поддерживал только TLSv1.2 и поддерживал безупречную безопасность.

Также необходимо, чтобы приложение поддерживало IPV6, в том числе не используя жестко закодированные IP-адреса. Рекомендуется использовать NSURLSession. В противном случае добавление исключений должно быть сделано в приложении.

См. сеанс WWDC-15 "Безопасность и приложения".

Также см. Блог Стивена Петерсона для деталей.

Ответ 2

Вы можете добавить это в свой файл Info.plist, это позволит не защищенные соединения:

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

Ответ 4

Я застрял на этом некоторое время и пробовал все трюки в Info.plist, но все еще имел ошибку:

HTTP load failed (kCFStreamErrorDomainSSL, -9813)

при попытке подключения к локальному серверу в процессе разработки.

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

На главном экране вашего симулятора вы сможете перетащить файл сертификата в симулятор, чтобы пригласить его добавить профиль сертификата. Или, если сертификат доступен через URL-адрес localhost в браузере Safari симулятора, вы можете принять его через сафари.

Надеюсь, это поможет кому-то, когда я обошел круги, прежде чем он щелкнул меня!

Ответ 5

Решение 1:

Если вы ищете work around, используйте подход ниже:

  • Добавьте ключ NSAllowsArbitraryLoads типа boolean со значением true.

Ваш файл Info.plist должен выглядеть следующим образом:

Снимок экрана 1

Однако этот подход не рекомендуется, поскольку он позволяет использовать все незащищенные соединения.

Решение 2:

SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this. Подробнее см. .

  • Добавить NSIncludesSubdomains ключ типа boolean со значением true
  • Добавить NSTemporaryExceptionAllowsInsecureHTTPLoads ключ типа boolean со значением true
  • Добавить NSTemporaryExceptionMinimumTLSVersion ключ типа Строка со значением TLSv1.2

Ваш файл Info.plist должен выглядеть следующим образом:

Снимок экрана 2