Ошибка загрузки HTTP NSURLSession/NSURLConnection (kCFStreamErrorDomainSSL, -9813) не на всех iPhone?

одно из моих приложений не может подключиться к своему серверу API. Зарегистрированная причина: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813). Пока не удалось найти, почему и что, но самое неприятное, что эта проблема возникает на некоторых из моих тестовых устройств. На другом все нормально. Я использую NSURLConnection:sendSynchronousRequest:returningResponse:error:, но после некоторого рефакторинга и попытки с NSURLSessionDataTask:dataTaskWithRequest:completionHandler: проблема все еще возникает. Также добавлено

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
    completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}

и еще ничего.....

p.s. несмотря на то, что моя первая проблема повторяет многие другие, меня больше всего беспокоит, почему эта ошибка появляется только на ОДНОМ из моих тестовых устройств (после «Настройки» -> «Основные» -> «Сброс» она тоже работает нормально, но как сказать Apple «пожалуйста, перезагрузите ваш испытательное устройство"?). Другие работают отлично.


person user3352185    schedule 30.06.2016    source источник
comment
Возможный дубликат CFNetwork SSLHandshake failed iOS 9   -  person FelixSFD    schedule 30.06.2016
comment
@FelixSFD, вы можете проверить мою правку :)   -  person user3352185    schedule 30.06.2016
comment
Большое спасибо за Ваш пост. У меня была аналогичная проблема: http-запрос не работал (нет ответа) только на ОДНОМ тестовом устройстве iPhone. Сводил меня с ума, потому что одно и то же приложение с одним и тем же сетевым запросом работало на 5 разных физических iPhone. Наконец, полный сброс устройства решил эту проблему, запустив iOS 12 beta 12. Какая мистическая ошибка ... потраченный впустую целый день.   -  person balazs630    schedule 12.09.2018


Ответы (1)


Ошибка -9813 — это errSSLNoRootCert. Это означает, что цепочка сертификатов, предоставленная сервером, не достигает доверенного корневого (якорного) сертификата и обычно вызвана отсутствием сертификатов в цепочке.

Причиной различий между устройствами может быть то, что некоторые устройства смогли успешно получить отсутствующие сертификаты (OCSP?), потому что некоторые устройства имеют дополнительные доверенные сертификаты привязки, которых нет на других устройствах по какой-либо причине, или потому что некоторые сертификаты в цепочке подписаны с использованием алгоритма подписи ключей, который больше не принимается в iOS 9 и поэтому игнорируется.

Я бы посоветовал вам связаться с вашим поставщиком сертификата TLS и получить новую копию файла цепочки TLS, обновить файл цепочки на сервере, перезапустить сервер и посмотреть, исчезнет ли проблема.

Если это не поможет, отредактируйте свой вопрос, указав URL-адрес, который мы можем протестировать, а также результаты запуска openssl s_client -connect yourhostname:443 на рассматриваемом хосте.

Дополнительные советы здесь:

person dgatwood    schedule 06.07.2016