Эта проблема протекает по всему стеку переполнения, и я провел последние 2 дня, пробовав бесчисленные комбинации конфигураций ATP и получив мое приложение для работы. Я собираюсь быть основательным с моей проблемой, так как кажется, что крошечная вещь может повлиять на решение этой проблемы.iOS 9 ATS блокирует HTTPS-запрос на сервер с самоподписанным сертификатом
Я только что установил сервер Ubuntu 14 с поддержкой SSL и TLS 1.2. На моем сервере мои серверные скрипты, от которых зависит мое приложение. В моем приложении я использую NSMutableURLRequest просить моего API от сервера так:
NSString * noteDataString = [NSString stringWithFormat:@"email=%@&password=%@&type=%@", companyEmail, companyPassword, @"login"];
NSData * postData = [noteDataString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString * postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://mydomain.me:443/path/to/file.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSHTTPURLResponse * urlResponse = nil;
NSError * error = nil;
NSData * responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString * result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"Response Code: %ld", (long)[urlResponse statusCode]);
Когда я скопировать URL в Chrome правильный возврат PHP показан. При обращении с Xcode 7 на 9 прошивкой я получаю эту ошибку:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
я использовал бесчисленные info.plist настройки, как видно по аналогичным вопросам. Я попытался отключить необходимость прямой секретности, я попытался включить произвольные нагрузки, я попытался использовать домен исключения mydomain.me и его поддомены. Единственный прогресс, который я достиг, - это код ошибки -9813, переходящий на -9802.
Мне известно о добавлении методов делегатов для NSURLRequest, но они никогда не вызываются и не предполагаются избыточными для решения этой проблемы.
Я построил много приложений с сервера MAMP, используя localhost и http, и запросы работали, когда я включал произвольные нагрузки, поэтому ничего плохого в моем plist.
Это ошеломляет, почему у меня есть специальный чехол, и я знал, что Stack Overflow был местом для таких ситуаций!
Спасибо, и я надеюсь, что это поможет многим другим разработчикам, выходящим за меня, когда они будут решены.
Как указано [gnasher729] (http://stackoverflow.com/a/35207813/3527940), это связано с самозаверяющим сертификатом, который не имеет отношения к ATS. – jcaron
Вы можете использовать 'nscurl' в OS X 10.11, где есть документация [здесь] (https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW41) - это действительно полезно для проверки того, действительно ли ATS является проблемой и получает самый надежный набор ключей! – Rich
Спасибо, что дайте мне знать! Обязательно заклейте это: – bluey31