TL;DR: это связано с SSL-шифрами, которые позволяют серверы Firebase (ATS требует ECDHE только из коробки).
Как уже упоминалось, обходным путем в Info.plist является добавление следующего:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>firebaseio.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
В документах ATS , Apple позволяет только следующее:
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
Установка флага NSThirdPartyExceptionRequiresForwardSecrecy в NO в Info.plist добавляет следующие дополнительные:
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
Я не согласен с тем, что флаг называется «...ExceptionRequiresForwardSecrecy», поскольку технически DHE обеспечивает идеальную прямую секретность, просто он медленнее, чем сопоставимые версии ECDHE. Мне кажется, что должно быть два флага, один из которых является исключением для прямой секретности, а другой просто говорит, что вам удобно иметь более медленное рукопожатие.
Технически вы также можете сделать исключенный домен <your-firebase-app>.firebaseio.com и не иметь флага NSIncludesSubdomains, но я хотел сделать это достаточно общим.
Поскольку мы разрешаем шифры, отличные от ECDHE, Firebase должен будет запретить их на стороне сервера, чтобы это работало из коробки (если только разработчики не захотят начать возиться с вещами более низкого уровня, чем NSURLRequest, см. это сообщение SO для получения дополнительной информации о настройке шифров SSL, но вы потратите на это больше времени, чем на добавление несколько строк в Info.plist).
Что касается безопасности, мы предоставляем сопоставимые версии тех же шифров, просто не используя версию на эллиптических кривых (которая обеспечивает приличное улучшение производительности, но исключает определенные браузеры [особенно мобильные браузеры]). Дополнительная информация о DHE и ECDHE (и некоторые другие полезные сведения о SSL в отношении Forward Secrecy: здесь).
Как бы то ни было, клиенты реального времени не имеют этой проблемы, поэтому я настоятельно рекомендую использовать их для лучшего взаимодействия с Firebase :)
person
Mike McDonald
schedule
12.07.2015