Ошибка SSL при подключении к серверу через iPhone
Я пытаюсь установить HTTPS-соединение с сервером с помощью моего приложения. Но соединение выходит из строя из-за ошибки
Ошибка домена = NSURLErrorDomain Code = -1200 "Произошла ошибка SSL и невозможно создать безопасное соединение с сервером". UserInfo = 0x612eb30 {NSErrorFailingURLStringKey = https: myURL.com/signup, NSLocalizedRecoverySuggestion = Хотелось бы подключиться к серверу в любом случае?, NSErrorFailingURLKey = https: myURL.com/signup, NSLocalizedDescription = Произошла ошибка SSL, и безопасное соединение с сервер не может быть выполнен. NSUnderlyingError = 0x612eb70 "Ошибка SSL и не удалось создать безопасное соединение с сервером".}
Код для подключения к серверу -
-(IBAction) handleEvents:(id)sender
{
if ((UIButton*)sender == submit) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSLog(@"Begin");
NSData *urlData;
NSURLResponse *response;
NSError *error;
NSString *url =[[NSString alloc]initWithFormat:@"%@signup",baseURL];
NSURL *theURL =[NSURL URLWithString:url];
NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:0.0f];
[theRequest setHTTPMethod:@"POST"];
NSString *theBodyString = [NSString stringWithFormat:@"emailId=%@&mobileNumber=%@&appId=%@&password=%@&firstName=%@&lastName=%@"
,@"[email protected]",@"919879876780",@"bf1c7a6b3d266a7fe350fcfc4dda275211c13c23" ,@"qwerty" , @"Dev" , @"Sri"];
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
[theRequest setHTTPBody:theBodyData];
urlData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
}
}
мои методы делегата
- (void)handleError:(NSError *)error
{
NSLog(@"----->%@",error);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge (NSURLAuthenticationChallenge *)challenge {
NSLog(@"check auth");
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
Я застрял здесь и не смог найти выход.
Приветствуется любая форма помощи.
Спасибо заранее!
Ответы
Ответ 1
Поскольку он оставлен без ответа в течение длительного времени, и мои исследования и текущая разработка показывают, что код отлично подходит для подключения, его сертификат на сервере, который не был подписан уполномоченным центром сертификации. поэтому любой, у кого есть такая проблема, проверяет, что сертификат действителен на сервере или нет.
Надеюсь, это поможет!
Ответ 2
iOS 9 заставляет соединения, которые используют HTTPS, быть TLS 1.2, чтобы избежать недавних уязвимостей. В iOS 8 поддерживались даже незашифрованные HTTP-соединения, поэтому более старые версии TLS также не вызывали проблем. В качестве обходного пути вы можете добавить этот фрагмент кода к вашему Info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Таким образом вы отключите безопасность транспорта приложений. Надеюсь, что это полезно.
Ответ 3
Взгляните на эту страницу:
https://github.com/vinhnx/iOS-issues/issues/1
В двух словах:
Причина в том, что начиная с iOS9 и OSX 10.11 все приложения, созданные на XCode7, потребуют TLS 1.2 для подключения SSL и не работают для более ранних протоколов.
Существует несколько способов преодоления этой проблемы.
"NSAppTransportSecurity → NSAllowsArbitraryLoads" не подходит, потому что он отключит TLS 1.2 для всех подключений вашего приложения, и это может привести к отказу вашего приложения от Apple.
Подход "за пределы домена" намного лучше.
Ответ 4
Возможно, ваше устройство имеет неправильные дату и время:)
Ответ 5
Я использовал iOS 9.3.1 и использовал https, когда попадал на эту проблему. Он отлично работал в симуляторе, но не смог на моем iPad. Причина в том, что у моего iPad включен WiFi и он подключился к гостевой сети моей компании, но я не получил всплывающий веб-сайт, на котором я принимаю участие в сети. После принятия все снова работало нормально.
Ответ 6
Пожалуйста, убедитесь, что версия TLS 1.2, а не TLS 1.0
.
Приложения, построенные на XCode8
, потребуют TLS 1.2
для подключения SSL
Ответ 7
Вы можете использовать это.
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:str];
Это позволит ssl-уровню принимать сертификат, даже если объект в сертификате не равен хосту.
Это старый способ iOS 5-7
Надеюсь на эту помощь!
Ответ 8
Даже я столкнулся с той же проблемой.
Эта проблема может возникнуть, если сертификат SSL через сервер является частным сертификатом. В таком сценарии вы можете решить это с помощью этого.
Ответ 9
Попробуйте использовать веб-адрес с сафари с телефона.