О ATS SSL в версии для iOS 9
Мои приложения используют http и пока не обновляются для iOS9. Сегодня я обновился до iOS9 на своем iPad, все мои приложения все еще работают с использованием http. Похоже, что Apple не запускает https в версии для iOS9. Кто-нибудь знает, когда Apple заставит это сделать или Apple не сделает этого? По какой-то причине я не хочу обновлять свои приложения.
3 ответа
Текущие приложения подходят для iOS 9. Требование ATS SSL вступает в силу при разработке приложений для iOS 9.
Из приложения Техника безопасности транспорта
Поведение по умолчанию:
Все соединения, использующие API-интерфейсы NSURLConnection, CFURL или NSURLSession, используют поведение App Transport Security по умолчанию в приложениях, созданных для iOS 9.0 или более поздней версии и OS X 10.11 или более поздней версии. Соединения, которые не соответствуют требованиям, потерпят неудачу.
Ключевая часть: приложения, созданные для iOS 9.0 или новее.
Это требования безопасности транспорта приложения:
- Сервер должен поддерживать по крайней мере версию 1.2 протокола TLS.
- Соединительные шифры ограничены теми, которые обеспечивают прямую секретность (см. Список шифров ниже.)
- Сертификаты должны быть подписаны с использованием алгоритма хеширования подписи SHA256 или более лучшего, либо с ключом RSA 2048 бит или более, либо с ключом Elliptic-Curve (ECC) 256 бит или более.
- Недействительные сертификаты приводят к серьезному отказу и отсутствию соединения.
ATS включается в приложениях, созданных на Xcode 7, но не на приложениях, созданных с более ранней версией Xcode. Это сделано для предотвращения "взлома" сотен тысяч приложений на iOS 9.
Если вы перестраиваете свое приложение, используя Xcode 7, ATS будет включен для вашего приложения, и вам нужно будет либо изменить свой бэкэнд, чтобы использовать HTTPS, либо добавить исключения в info.plist.
По сути, ATS является "принудительным" для новых / обновленных приложений (или вам необходимо явно частично или полностью отключить его), но не для старых приложений.
iOS 9 заставляет соединения, которые используют HTTPS, быть TLS 1.2, чтобы избежать недавних уязвимостей. В iOS 8 поддерживались даже незашифрованные HTTP-соединения, поэтому старые версии TLS также не создавали проблем. В качестве обходного пути вы можете добавить этот фрагмент кода в свой Info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>