2010-11-19 30 views
2

J'ai un problème de connexion au serveur à l'aide de SSL. J'utilise ASIHTTPRequest.Connexion au HTTPS à l'aide du certificat SSL auto-signé

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://server:port"]]; 
//[request setValidatesSecureCertificate:NO]; 
[request setRequestMethod:@"POST"]; 
[request setTimeOutSeconds:10]; 

[request addRequestHeader:@"Host" value:@"server:port"];  
[request addRequestHeader:@"Content-Type" value:@"text/json; charset=utf-8"]; 

Au-dessus me donne la "Un échec de connexion a eu lieu: problème SSL (peut-être une mauvaise/expiration/certificat auto-signé)". Si je ne commente pas la ligne [request setValidatesSecureCertificate: NO]; Je reçois 404.

Je sais que dans l'environnement de développement, le serveur utilise le certificat auto-signé, sur le serveur de production, le certificat est signé par "thawte".

J'ai donc envoyé le certificat à moi-même, appuyez sur la pièce jointe en utilisant l'application Mail sur mon appareil - il m'a redirigé vers les paramètres et j'ai installé le certificat. Bien sûr, comme il était auto-signé, il me dit que le certificat n'est pas fiable, mais c'est le seul problème avec le certificat, il n'est pas expiré, etc.

Maintenant, je fais la même approche et je reçois à nouveau soit "Une connexion défaillance est survenue: problème SSL (peut-être une mauvaise/expiration/certificat auto-signé) » ou 404.

J'ai aussi ajouté le certificat à mon projet et ajouter les lignes suivantes:

NSData* certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]]; 

SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)certData); 
[request setClientCertificates:[NSArray arrayWithObject:(id)cert]]; 

mais il doesn ne change rien.

Ai-je raté quelque chose?

Répondre

0

Je voudrais utiliser quelque chose comme l'addon client REST pour firefox pour faire le même POST à ​​partir d'un navigateur. Pour voir ce que le site retourne vraiment. Il se peut que le 404 soit la réponse correcte du serveur pour l'URL spécifiée et que le certificat invalide empêche simplement la négociation SSL de se terminer, de sorte que vous ne voyez jamais l'erreur.

+0

Pourriez-vous recommander quelque chose de mieux? Certains d'entre eux disent qu'ils ne fonctionneront pas à Firefox 4.0b7. Et btw je suis sûr que l'API fonctionne exactement la même chose en utilisant http et https. –

+0

Je n'ai pas mis à niveau vers FF 4 en raison de problèmes de compatibilité, donc je ne sais pas si 'REST Client' fonctionne ou non avec. Le nom de l'addon est 'Client REST'. Je suis venu de l'avis récemment, que l'utilisation de certificats auto-signés en développement est en fait un gaspillage d'argent. Pour chaque projet sur lequel j'ai travaillé en utilisant des certificats auto-signés, cela a coûté plusieurs heures de temps au développeur pour résoudre les problèmes avec eux. Je recommande maintenant à mes clients qu'ils ont juste poney les quelques centaines de dollars pour un vrai certificat et éliminer un autre obstacle pour les développeurs. –

+0

Si vous avez la clé privée du cert, ce que vous faites probablement depuis qu'il est auto-signé, je crois que vous pouvez configurer WireShark pour déchiffrer le trafic SSL. Cela pourrait vous aider à savoir exactement ce qui se passe sur votre connexion. –