Ошибка SSL при подключении к серверу через iPhone - PullRequest
31 голосов
/ 18 февраля 2011

Я пытаюсь установить HTTPS-соединение с сервером, используя мое приложение. Но соединение не установлено из-за следующей ошибки

Error Domain = NSURLErrorDomain Code = -1200 «Произошла ошибка SSL, и безопасное соединение с сервером невозможно.» UserInfo = 0x612eb30 {NSErrorFailingURLStringKey = https: myURL.com/signup, NSLocalizedRecoverySuggestion = Вы все равно хотите подключиться к серверу ?, NSErrorFailingURLKey = https: myURL.com/signup, произошло NSLocalizedDescription с NSL, и произошла ошибка SSL для 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=%@"
                               ,@"abc@example.com",@"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];
   }

Я застрял здесь и не мог найти выход.

Любая форма помощи будет принята с благодарностью.

спасибо заранее !!

Ответы [ 8 ]

43 голосов
/ 30 июня 2015

iOS 9 заставляет соединения, использующие HTTPS, быть TLS 1.2, чтобы избежать недавних уязвимостей.В iOS 8 поддерживались даже незашифрованные HTTP-соединения, поэтому более старые версии TLS также не создавали проблем.В качестве обходного пути вы можете добавить этот фрагмент кода в свой Info.plist:

  <key>NSAppTransportSecurity</key>  
  <dict>  
  <key>NSAllowsArbitraryLoads</key>  
  <true/>  
  </dict>  

Тем самым вы отключите App Transport Security.Надеюсь, что это полезно.

14 голосов
/ 29 мая 2011

Поскольку он оставался без ответа в течение долгого времени, и мои исследования и текущие разработки показывают, что код отлично подходит для соединения, это сертификат на сервере, который не был подписан авторизованным центром сертификации. таким образом, любой, имеющий такую ​​проблему, проверяет, действителен ли сертификат на стороне сервера или нет.

Надеюсь, это поможет !!

5 голосов
/ 20 января 2016

Возможно ваше устройство имеет неправильную дату и время:)

4 голосов
/ 10 сентября 2015

Взгляните на эту страницу: https://github.com/vinhnx/iOS-issues/issues/1

В двух словах: причина в том, что начиная с iOS9 и OSX 10.11 все приложения, созданные на XCode7, будут требовать TLS 1.2 для SSL-соединения и не будут работать дляболее ранние протоколы.
Существует несколько способов решения этой проблемы.
Подход "NSAppTransportSecurity -> NSAllowsArbitraryLoads" не годится, поскольку он отключит TLS 1.2 для всех соединений из вашего приложения, и это может привести к отклонению вашегоприложение от Apple.
Подход "Исключения для каждого домена" намного лучше.

0 голосов
/ 23 ноября 2016

Пожалуйста, убедитесь, что версия TLS имеет значение 1.2 * не TLS 1.0.

Для приложений, построенных на XCode8, потребуется TLS 1.2 для SSLподключение

0 голосов
/ 04 мая 2016

Даже я столкнулся с той же проблемой.

Эта проблема может возникнуть, если сертификат SSL на сервере является частным сертификатом. В таком сценарии вы можете решить это, используя this .

0 голосов
/ 20 апреля 2016

Я использовал iOS 9.3.1 и использовал https, когда столкнулся с этой проблемой. Он работал нормально через симулятор, но не получилось на моем iPad. Причина в том, что на моем iPad был включен WiFi и он подключился к гостевой сети моей компании, но я не получил всплывающий веб-сайт, на котором я согласен присоединиться к сети. После принятия все снова заработало нормально.

0 голосов
/ 12 апреля 2012

Попробуйте веб-адрес с сафари с телефона.

...