SSL Erreur de Connexion au Serveur via iPhone
Que j'essaie d'établir une connexion HTTPS sur un serveur à l'aide de mon application. Mais la connexion échoue en raison de l'erreur suivante
Erreur de Domaine=NSURLErrorDomain Code=-1200 "Une erreur SSL a eu lieu et d'une connexion sécurisée au serveur ne peut pas être fait." UserInfo=0x612eb30 {NSErrorFailingURLStringKey=https:myURL.com/signup, NSLocalizedRecoverySuggestion=souhaitez-vous vous connecter au serveur de toute façon?, NSErrorFailingURLKey=https:myURL.com/signup, NSLocalizedDescription=Une erreur SSL a eu lieu et d'une connexion sécurisée au serveur ne peut pas être fait., NSUnderlyingError=0x612eb70 "Une erreur SSL a eu lieu et d'une connexion sécurisée au serveur ne peut pas être fait."}
Le code pour se connecter à un 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];
}
}
mon délégué méthodes 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 ne pouvait pas trouver un moyen de sortir.
Toute forme d'aide serait grandement appréciée.
merci d'avance!!
Vous devez vous connecter pour publier un commentaire.
iOS 9 forces les connexions utilisant le protocole HTTPS pour être TLS 1.2 pour éviter récentes vulnérabilités. Dans iOS 8, même HTTP non les connexions ont été pris en charge, afin que les anciennes versions de TLS n'a pas de problèmes non plus. Comme solution de contournement, vous pouvez ajouter ce bout de code pour votre Info.plist:
Ainsi vous êtes à la désactivation de l'Application de la Sécurité des Transports. J'espère que c'est utile.
Depuis qu'elle a été laissée sans réponse pour le long temps et mes activités de recherche et de développement actuel indique que le code est parfaitement bien pour la connexion, c'est le certificat sur le serveur qui n'a pas été signé par une autorité de certification. donc, toute personne ayant ce type de problème, vérifiez que le certificat est valide à la fin du serveur ou pas.
Espère que cela aiderait!!
Peut-être que votre appareil a une mauvaise date & temps 🙂
Prendre un coup d'oeil à cette page:
https://github.com/vinhnx/iOS-issues/issues/1
En un mot:
La raison en est, qu'à partir de la iOS9 et OS x 10.11 toutes les applications construites sur XCode7 exigera TLS 1.2 pour la connexion SSL, et échoue protocoles antérieurs.
Il existe plusieurs méthodes pour surmonter ce problème.
"NSAppTransportSecurity -> NSAllowsArbitraryLoads" approche n'est pas bonne, car il permet de désactiver le protocole TLS 1.2 pour toutes les connexions à partir de votre application, ce qui peut conduire à un rejet de votre application par Apple.
"Par Domaine Exceptions" l'approche est beaucoup plus mieux.
TLSv1.0
il a travaillé. Merci.J'ai été en utilisant iOS 9.3.1 et a été en utilisant https, quand j'appuie sur ce problème. Il a bien fonctionné par le simulateur, mais pas sur mon iPad. La raison en est parce que mon iPad avait le WiFi activé et a connecté à mon réseau invité, mais je n'avais pas reçu le pop-up site web où j'ai accepter de rejoindre le réseau. Après l'acceptation de tout a bien fonctionné de nouveau.
S'il vous plaît, assurez-vous que la version de TLS est 1.2,pas
TLS 1.0
.Applications construites sur
XCode8
exigeraTLS 1.2
pour la connexion SSLMême j'ai été confronté au même problème.
Ce problème peut se produire si le certificat SSL du serveur est un certificat privé. Dans un tel scénario, vous pouvez le résoudre à l'aide de cette.
Essayer l'adresse web avec safari de téléphone.