Je suis un peu nouveau à l'objectif-C mais j'ai rencontré un problème que je ne peux pas résoudre, surtout parce que je ne suis pas sûr d'implémenter correctement la solution.Objective-C SSL Synchronous Connection
J'essaie de me connecter en utilisant une connexion synchrone à un site https avec un certificat auto-signé. Je reçois le
erreur Domaine = code NSURLErrorDomain = -1202 « certificat de serveur non sécurisé »
Erreur que j'ai vu des solutions à ce forum. La solution que j'ai trouvée était d'ajouter:
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
au NSURLDelegate pour accepter tous les certificats. Lorsque je me connecte au site en utilisant juste un:
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://examplesite.com/"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
Cela fonctionne très bien et je vois le défi être accepté. Cependant, lorsque j'essaie de me connecter à l'aide de la connexion synchrone, j'obtiens toujours l'erreur et je ne vois pas les fonctions de défi lancées lorsque je mets la connexion.
Comment puis-je obtenir la connexion synchrone pour utiliser les méthodes de challenge? Est-ce quelque chose à voir avec le délégué: faire partie de URLConnection? J'ai aussi la journalisation pour envoyer/recevoir des données dans le NSURLDelegate qui est appelé par ma fonction de connexion mais pas par la fonction synchrone.
Ce que je me sers pour la partie synchrone:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:@"https://examplesite.com/"]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [[NSString stringWithString:@"username=mike"] dataUsingEncoding: NSUTF8StringEncoding]];
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"%@", error);
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
NSLog(@"%@", stringReply);
[stringReply release];
NSLog(@"Done");
Comme je l'ai mentionné, je suis un peu nouveau pour objectif C pour être gentil :)
Merci pour toute aide. Mike
Avez-vous fini par convertir votre demande en asynchrone? Je suis confronté au même problème et j'ai des cauchemars de devoir convertir mon code. – kmehta