2016-01-04 3 views
1

Я использую приложение IOS, и я получаю ошибку ниже при тестировании в прошивке 9.CFNetwork SSLHandshake не удался (-9806) периодически

CFNetwork SSLHandshake failed (-9806)  
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)  

Я нашел несколько ссылок, говоря это может быть связанно с NSAppTransportSecurity предлагая добавить исключение для моего домена или отключить ATS. Но мой сервер поддерживает TLS1.2, и я получаю эту проблему только с перерывами. Если бы это было связано с NSTransportSecurity, я предполагаю, что проблема должна быть последовательной. Странно, что это непротиворечиво. Приложение прекрасно работает и в большинстве случаев может подключаться к серверу. Но через некоторое время я получаю вышеуказанную ошибку. Я использую NSURLCONNECTION. Большая часть взаимодействия с приложением похожа на клик на кнопке и делает сетевой вызов на сервере (tomcat). После того, как возникла ошибка SSL, единственный способ заставить приложение успешно отправлять запросы на сервер - это убить приложение и начать его снова. Я попытался изменить соединение с Wi-Fi на 3g во время проблемы и даже перезапустить сервер после возникновения проблемы, но я не мог найти никакой удачи. Я могу отлично работать с сафари и другими приложениями. Я пытаюсь найти решение для этого в течение некоторого времени. Сервер не поддерживает прямую переадресацию.

Чтобы проверить проблему, я проверил SSL-пакеты от клиента. Когда проблема возникает, клиент отправляет другой список шифров по сравнению с тем, когда соединение работает хорошо. Cipher list during issue

Когда соединение работает хорошо, я могу видеть список отправленных ниже шифров.

enter image description here

Это было также замечено, что во время выдачи клиенту привет пакет был показан, как SSL, где, как, когда соединение хороший клиент привет пакет показан в TLS1.2

Во время выпуска enter image description here

Когда нет никакой проблемы enter image description here

Я использую тот же класс NSurlconnetion к сотрудничеству nnect для сервера во всем приложении. Я смущен, почему и как может быть такое несоответствие и как один и тот же вызов сервера, который работает один раз, не работает позже. Означают ли данные выше, что во время проблемы клиент пытается подключиться через tls1.0 или ниже? Сервер поддерживает только TLS 1.1 и TLS 1.2. Проблема обнаружена только в iOS 9. Любая помощь очень ценится.

ответ

0

Приложение, вероятно, начнет работу с TLS 1.2 и предложит шифры, новые с TLS 1.2 (те, у которых есть GCM в названии). Тогда я думаю, что есть проблема с рукопожатием, может быть, вызваны временными проблемами сервера, некоторыми промежуточными брандмауэрами между ними или чем-то еще. С этого момента приложение предполагает, что есть проблемы с TLS 1.2 и попытается использовать пониженное соединение, т. Е. TLS 1.0. и оставайся так, потому что «он знает», что TLS 1.2 не будет работать.

Этот вид понижений часто наблюдается и в браузерах, но обычно они помнят о том, чтобы сделать понижение, только если это было хотя бы один раз успешным. Может ли быть задействован промежуточный межсетевой экран перехвата SSL (межсетевой экран), из-за которого исходный TLS 1.2 терпит неудачу, а преуспевание - с успехом? И.Е. возникает ли проблема только после того, как устройство подключено один раз через этот средний ящик, а затем попытается снова подключиться к вашему сайту?

+0

Возможно ли, чтобы клиент iOS подключился к веб-серверу с TLS 1.2 только без включения ATS? Является ли ATS единственным способом поговорить с веб-сервером TLS 1.2? – Aviva

+0

@Aviva: комментарии не предназначены для запроса новых вопросов.Пожалуйста, задайте новый вопрос, а не подробно расскажите о проблеме, которую вы пытаетесь решить. –

+0

Извините, Stackoverflow ограничивает количество вопросов новичков, которые я могу задать. – Aviva

Смежные вопросы