У кого-нибудь NSURLConnection работает на iOS 9 без исключений?

Я пытаюсь запустить свое приложение на iOS 9 - Xcode 7 beta 5. Хотя мои URL-адреса https, соединение NSURL по-прежнему вызывает ошибку:

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

Я пытаюсь избежать использования исключения, чтобы заставить это работать. Мой сервер поддерживает необходимые протоколы: https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

Спасибо...

ОБНОВЛЕНИЕ: в примечания к выпуску указано, что они отказались от поддержки по умолчанию шифров DHE_RSA:

«Наборы шифров DHE_RSA теперь отключены по умолчанию в Secure Transport для клиентов TLS. Это может привести к невозможности подключения к серверам TLS, которые поддерживают только наборы шифров DHE_RSA. Приложения, которые явно включают наборы шифров с помощью SSLSetEnabledCiphers, не затрагиваются и по-прежнему будут использовать наборы шифров DHE_RSA. если явно включено».

Это шифры, поддерживаемые моим сервером. Полный список см. здесь: https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

Поэтому я предполагаю, что мне нужно использовать SSLSetEnabledCiphers для каждого NSURLConnection или обновить мой сервер для поддержки шифров DHE_ECDSA. Или пока используйте механизм исключений.

Что-нибудь я пропустил? И у кого-нибудь есть пример кода для использования SSLSetEnabledCiphers?

Спасибо.


person Richard    schedule 15.08.2015    source источник
comment
stackoverflow.com/questions/30720813/   -  person lukeswitz    schedule 16.08.2015
comment
Да, у этого есть обходные пути. Я пытаюсь принять протокол TLS и не использовать коды исключений в plist.   -  person Richard    schedule 16.08.2015
comment
До сих пор нет хорошего ответа на этот вопрос, хотя у меня был пропуск для магазина с этим, реализованным на прошлой неделе.   -  person lukeswitz    schedule 16.08.2015


Ответы (1)


Вот сделка. Безобидные формулировки о том, что наборы шифров DHE_RSA не поддерживаются по умолчанию, — довольно большое изменение Apple в бета-версии 5. Многие серверы не поддерживают шифры ECDHE_ECDSA по умолчанию. Чтобы поддерживать эти шифры на моем сервере, похоже, мне придется что-то или несколько обновить. Или даже перекомпилировать что-то. Подтвердить

И я предполагал, что мне просто нужно убедиться, что все URL-адреса являются HTTPS!

В частности, я смог поддерживать ссылки только для HTTPS на свой сервер, используя ключ «NSExceptionRequiresForwardSecrecy = NO» в info.plist. Также не забываем ключ "NSIncludesSubdomains = YES" при необходимости.

Полезный бэкграунд, особенно если вам не знакомы обмен Диффи-Хелмена, эллиптическая кривая и прямая секретность:

http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html

http://blog.lowsnr.net/2014/10/26/configuring-apache-2-2-ssltls-for-forward-secrecy/

person Richard    schedule 16.08.2015
comment
Дальнейшие исследования, благодаря hynek.me, показывают, что для поддержки шифров ECDHE вам нужен либо Apache 2.4, либо Apache 2.2.26. Не уверен, насколько распространены эти версии. http://archive.apache.org/dist/httpd/CHANGES_2.2.26 - person Richard; 17.08.2015
comment
Похоже, им еще слишком рано это делать, что просто заставит всех снова включить его, вместо того, чтобы обновлять свой сервер... - person Glenn Maynard; 19.08.2015
comment
К счастью, у меня есть хорошая компания: Facebook SDK изначально не поддерживает Forward Secrecy на своих серверах: developers.facebook.com/docs/ios/ios9 - person Richard; 22.08.2015