iOS 8.4 CFNetwork SSLHandshake не удалось (-9850)

Мой код для рукопожатия ssl не работает, так как я обновил xcode до 6.4 (и симулятор до ios 8.4).
Ошибка: CFNetwork SSLHandshake failed (-9850)

Тот же код успешно выполняет рукопожатие ssl на симуляторе ios 8.3 (я также пробовал симулятор ios 8.3 из xcode 6.4, и он хорошо рукопожатие).

Вот фрагмент кода, который конфигурирует и запускает рукопожатие. Я использую свифт.

self.socket.startTLS([kCFStreamSSLLevel:kCFStreamSocketSecurityLevelTLSv1,
        kCFStreamSSLValidatesCertificateChain:kCFBooleanFalse])

Я пытался понять это целый день, и я даже не мог узнать, что означает код ошибки -9850. Он не указан вместе со всеми другими кодами в файле SecureTransport.h.

Обновление1:

Я узнал, что Apple ввела безопасность транспорта приложений, что означает, что вы можете объявлять домены, к которым хотите установить безопасное соединение. Во всяком случае, я пробовал с ATS, но безуспешно. Ошибка -9850 все еще создает проблемы.

Обновление 2 — Решение

Как предположили Михал и Стивен в своих ответах, я начал подозревать, что основная проблема находится на стороне сервера, что в конечном итоге оказалось правдой.
Я поговорил с парнем, который внедрил сервер, и все проблемы ушли после того, как он сгенерировал новые ssl-сертификаты длиной 2048. До этого они были 512.
С новыми сертификатами код на моей стороне работает отлично.


person Branko    schedule 03.07.2015    source источник
comment
Тема, связанная с этой проблемой: forums.developer.apple.com/thread/6793   -  person Aaron Brager    schedule 03.07.2015


Ответы (3)



Я полагаю, что это как-то связано с coreTLS:

Описание: coreTLS принимает короткие эфемерные ключи Диффи-Хеллмана (DH), которые используются в наборах эфемерных шифров DH с экспортной надежностью. Эта проблема, также известная как Logjam, позволяла злоумышленнику с привилегированным положением в сети понизить уровень безопасности до 512-битного DH, если сервер поддерживал набор эфемерных шифров DH с экспортной надежностью. Проблема устранена путем увеличения минимального допустимого размера по умолчанию для эфемерных ключей DH до 768 бит.

Судя по вашему коду, вы используете GCDAsyncSocket. Он был обновлен 10 месяцев назад, поэтому он определенно не отражает эту проблему.

person Michal    schedule 06.07.2015

Когда я получаю CFNetwork SSLHandshake failed -(*), это потому, что мое устройство подключено к сети, но не к Интернету.

person jake    schedule 03.07.2015
comment
У меня есть доступ в Интернет. Дело в том, что я не знаю, что такое код -9850 и что это происходит не на ios 8.3, а только на ios 8.4. - person Branko; 03.07.2015