web-dev-qa-db-fra.com

Erreur SSL lors de la connexion au serveur via l'iPhone

J'essaie d'établir une connexion HTTPS à un serveur à l'aide de mon application. Mais la connexion échoue à cause d'une erreur suivante

Error Domain = NSURLErrorDomain Code = -1200 "Une erreur SSL s'est produite et une connexion sécurisée au serveur ne peut pas être établie." UserInfo = 0x612eb30 {NSErrorFailingURLStringKey = https: myURL.com/signup, NSLocalizedRecoverySuggestion = Voulez-vous vous connecter quand même au serveur ?, NSErrorFailingURLKey = https: myURL.com/signup, NSLocalizedDescription = Une erreur SSL Impossible d'établir le serveur., NSUnderlyingError = 0x612eb70 "Une erreur SSL s'est produite et une connexion sécurisée au serveur ne peut pas être établie."}

Le code pour se connecter au serveur est

-(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];
    }
}

mes méthodes de délégué sont 

- (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];
   }

Je suis coincé ici et je ne pouvais trouver aucun moyen de sortir.

Toute forme d'aide serait grandement appréciée.

merci d'avance!!

30
devsri

Comme il est resté longtemps sans réponse et que mes recherches et le développement en cours indiquent que le code convient parfaitement à la connexion, c'est le certificat sur le serveur qui n'a pas été signé par une autorité de certification autorisée. ainsi, toute personne ayant ce type de problème vérifie que le certificat est valide sur le serveur ou non.

J'espère que cela aiderait !!

14
devsri

iOS 9 force les connexions qui utilisent HTTPS à être TLS 1.2 pour éviter les vulnérabilités récentes. Dans iOS 8, même les connexions HTTP non chiffrées étaient prises en charge, de sorte que les anciennes versions de TLS ne posaient aucun problème non plus. Pour contourner le problème, vous pouvez ajouter cet extrait de code à votre info.plist:

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

De ce fait, vous désactivez App Transport Security. J'espère que c'est utile.

44
Voda Ion

Peut-être que votre appareil a une date et une heure incorrectes :)

5
kolesnikovakate

Jetez un oeil à cette page: https://github.com/vinhnx/iOS-issues/issues/1

En résumé, la raison en est que, à partir de iOS9 et OSX 10.11, toutes les applications construites sur XCode7 nécessitent TLS 1.2 pour la connexion SSL et échouent pour les protocoles antérieurs.
Il existe plusieurs méthodes pour surmonter ce problème.
L’approche "NSAppTransportSecurity -> NSAllowsArbitraryLoads" n’est pas bonne car elle désactive TLS 1.2 pour toutes les connexions à partir de votre application, ce qui peut entraîner le rejet de votre application par Apple.
L’approche "Exceptions par domaine" est bien meilleure.

4
Olexandr Stepanov

Veuillez vous assurer que la version deTLSest 1.2 not TLS 1.0.

Les applications construites sur XCode8 nécessiteront TLS 1.2 pour la connexion SSL

0
rui

J'utilisais iOS 9.3.1 et utilisais https lorsque j'ai rencontré ce problème. Cela a bien fonctionné avec le simulateur, mais a échoué sur mon iPad. La raison en est que mon iPad avait le WiFi activé et s'était connecté au réseau invité de mon entreprise, mais je n'avais pas reçu le site Web contextuel où j'accepte de rejoindre le réseau. Après avoir accepté tout fonctionnait bien à nouveau.

0
Ecyrb