2010-08-07 4 views
4

J'ai découvert ASIHTTPRequest il y a quelques jours et je suis maintenant bloqué sur une chose. Je voudrais authentifier mon auto sur une adresse https (https://user:[email protected]/0.1/userCom/?apikey=12432)Authentification ASIHTTPRequest

J'essaie ce code:

NSURL *url = [NSURL URLWithString:@"https://api.domain.com/0.1/userCom/?apikey=12432"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setDelegate:self]; 
[request setUsername:@"myUserName"]; 
[request setPassword:@"myPassword"]; 
[request startAsynchronous]; 

et je l'ai mis en œuvre les méthodes déléguées

-(void)requestFailed:(ASIHTTPRequest *)request 
{ 
NSError *error = [request error]; 
NSLog(@"Failed %@ with code %d and with userInfo %@",[error domain],[error code],[error userInfo]); 
} 

-(void)requestFinished:(ASIHTTPRequest *)request 
{ 
NSLog(@"Finished : %@",[request responseString]); 
} 

Quand je lance mon application la méthode requestFailed est directement appelée et j'ai ce message:

Failed ASIHTTPRequestErrorDomain with code 1 and with userInfo { 
NSLocalizedDescription = "A connection failure occurred: SSL problem (possibly a bad/expired/self-signed certificate)"; 
NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-9807 \"The operation couldn\U2019t be completed. (OSStatus error -9807.)\" UserInfo=0x680fbf0 {}";

Vous avez une idée pour résoudre ce problème? Merci beaucoup!

Répondre

7

Il existe deux approches possibles:

i) Fixer le certificat sur votre/serveur si possible. (Ou il y a une petite chance que vous utilisiez le mauvais nom d'hôte pour vous connecter? La même erreur apparaît-elle lors de l'utilisation de safari sur l'appareil?)

C'est certainement l'approche correcte et préférée.

ou:

ii) Désactiver la vérification du certificat:

[request setValidatesSecureCertificate:NO]; 

Désactivation vérification des certificats est, peut-être de toute évidence, pas une bonne solution permanente. La désactivation supprime une grande partie de la sécurité fournie par https et laisse votre application ouverte aux attaques de type Man-in-the-Middle (MITM) pour commencer. Il peut s'agir d'une bonne solution temporaire lors du débogage ou de l'utilisation d'un serveur de test qui ne possède pas de certificat approprié, mais à long terme, vous devez corriger le problème sous-jacent afin que le certificat du serveur soit valide.

+0

i) Ce n'est pas mon serveur, donc je vais vérifier cela avec mon client :) Si j'essaye https: // utilisateur: [email protected]/0.1/userCom/?apikey=12323 sur mon Safari Mac il n'y a pas de problème. ii) Bien fonctionner! Merci pour votre aide. Si vous avez d'autres choses à ajouter, merci de l'écrire :) – Pierre

+0

Il est possible que Mac ait des autorités de certification présentes que l'iphone n'a pas, et qu'une autorité de certification manquante pourrait causer ce genre d'erreur. Si vous obtenez une erreur similaire sur safari sur l'appareil, alors c'est le problème - si le safari sur l'appareil fonctionne bien alors il pourrait s'agir d'un bug asihttprequest en quelque sorte. – JosephH

+0

Désactiver la vérification de certificat aide dans la plupart des cas – knuku

0

Ca m'arrive aussi mais la cause était une histoire différente - c'est parce que la date de mon appareil de test & est réglée sur une date antérieure.

Un certificat n'est valide que sur une plage de dates spécifique, c'est pourquoi l'application ne parvient pas à le valider avec un paramètre de date incorrect. Je l'ai fixé en réglant la date correcte & fois sur l'iphone.