Ошибка IOS 9 ATS SSL с поддерживающим сервером

Я установил Xcode 7 и попытался запустить мое приложение под iOS 9. Я получаю печально известную ошибку: Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. Дело в том, что мой сервер поддерживает TLSv1.2, и я использую NSURLSession.

Что может быть проблемой?

Ответ 1

Apple выпустила полный список требований для Безопасность при транспортировке приложений.

Выяснилось, что мы работаем с TLS v1.2, но упустили некоторые другие требования.

Здесь полный список проверок:

  • TLS требует, по крайней мере, версии 1.2.
  • Шиферы соединений ограничены теми, которые обеспечивают прямую секретность (см. ниже список шифров.)
  • Для обслуживания требуется сертификат с использованием, по меньшей мере, отпечатка SHA256 с ключом RSA с 2048 бит или более или с 256-битной или более эллиптической кривой (ECC).
  • Недействительные сертификаты приводят к жесткому сбою и отсутствию соединения.

Принятые шифры:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Ответ 2

В iOS9 Apple добавила новую функцию под названием "Безопасность транспорта приложений" (ATS).

ATS применяет лучшие методы во время сетевых вызовов, включая использование HTTPS.

Документация Apple перед выпуском:

ATS предотвращает случайное раскрытие, обеспечивает безопасное поведение по умолчанию, и его легко принять. Вы должны принять ОВД как можно скорее, независимо от того, создаете ли вы новое приложение или существующий.

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

Добавьте ссылку ниже в свой info.plist, а затем посмотрите.

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

Даже вы можете добавить конкретное исключение,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>

        ...

    </dict>
</dict>

Ответ 3

Отметьте этот документ, предоставленный apple.

У меня была аналогичная проблема во время выполнения на iOS 9, и что я сделал для ее исправления, был добавлен словарь NSAppTransportSecurity в мой info.plist файл с NSAllowsArbitraryLoads Bool, установленным на true, и после очистки и перестройка была сработана.

Надеюсь, это поможет!

Ответ 4

Для меня прокси-сервер блокировал попытку использовать интернет из другого источника, чтобы решить проблему. Wifi, Lan и т.д.