Запрос HTTPS в iOS 9: NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9802)
Я обновляю приложение для размещения новых ATS в Apple. Без каких-либо изменений в Plist-Info следующий код выдает ошибку в sendSynchronousRequest()
в ванильном симуляторе iOS 9.
NSURL *url =[NSURL URLWithString:@"https://Google.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
[request setHTTPMethod:@"GET"];
[request setURL:url];
NSURLResponse *urlResponse = nil;
NSError *error = nil;
NSData *reponse = [NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse
error:&error];
Ошибка:
Ошибка загрузки NSURLSession/NSURLConnection HTTP (kCFStreamErrorDomainSSL, -9802)
Любые мысли о том, что может быть позади этой проблемы?
Ps: Я понимаю, что NSURLConnection
устарел. Но эта работа AllowArbitraryLoads
поиск, если я добавлю AllowArbitraryLoads
в Plist
.
Ответы
Ответ 1
NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9802)
соответствует серверу, не поддерживающему "Forward Secrecy".
Чтобы обойти это, добавьте исключение домена в файл .plist следующим образом:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>test.testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
Ответ 2
Добавьте новую строку в свой файл plist.
![Добавить новую строку в ваш файл plist]()
Ответ 3
Я добавил этот код в info.plist, чтобы разрешить любой запрос http:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
В этой статье перечислены все изменения, внесенные Apple для iOS 9 и их реализации:
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Ответ 4
В соответствии с этим: https://forums.developer.apple.com/message/36842#36842
Исправлено правильное исключение для исправления загрузки HTTP (kCFStreamErrorDomainSSL, -9802):
NSExceptionAllowsInsecureHTTPLoads
Ответ 5
Добавьте в файл info.plist следующее. И замените "My_Base_Url.com" на ваш URL-адрес ссылки на веб-службу. Это должно сделать трюк.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>My_Base_Url.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSRequiresCertificateTransparency</key>
<false/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
</dict>
</dict>
</dict>
Ответ 6
Если ваше приложение включает страницу H5, иногда она также будет иметь эту ошибку.
Это требует не только включить Allow Arbitrary Loads
, но и потребовать добавить код ниже в appDelegate.m:
@implementation NSURLRequest(ATS)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end