2010-01-13 8 views
3

Je dois connecter mon application iPhone à un serveur avec un certificat auto-signé via HTTPS. Je ne peux pas changer le certificat ou le serveur. Puisque je ne veux pas accepter tous les certificats auto-signés, juste celui-ci, mon idée était d'importer le CERT dans le trousseau d'applications (lire le CERT du fichier et l'ajouter au trousseau avec SecItemAdd).HTTPS avec certificat auto-signé dans le trousseau de l'application

Si je lance l'application dans le simulateur, installez le cert et la recherche puis le trousseau pour (à l'aide SecItemCopyMatching), le cert se trouve, mais la connexion échoue toujours avec « certificat de serveur non sécurisé » erreur.

Est-ce un problème avec le simulateur ou mon application? Dois-je faire autre chose pour que cela fonctionne? Ou puis-je supposer que si j'ajoute un certificat au trousseau sur un périphérique réel, la connexion au serveur sera réussie (j'utilise NSURLConnection.sendSynchronousRequest)?

Merci pour toute aide!

Répondre

2

Vous pouvez utiliser la bibliothèque ASIHTTPRequest. Il permet d'ignorer la validation du certificat en définissant la propriété validatesSecureCertificate de l'objet ASIHTTPRequest à NO.

+1

Est-ce que cela ne changerait pas mon application pour accepter un certificat auto-signé? Je voudrais activer les connexions uniquement avec ce cert spécifique. Est-ce possible avec une entrée de keychain (comme en Java)? – jelenaasche

+0

cette propriété est juste définie à la demande, pas pour l'application entière. – Morion

+0

Désolé pour la confusion, je voulais dire des demandes, pas toute l'application. Je voudrais établir la connexion seulement si le serveur a ce cert spécifique, pas n'importe quel autre autosigné. Est-il possible avec l'entrée de keychain? – jelenaasche

1

Cela devrait fonctionner dans le simulateur avec quelques mises en garde, voir l'exemple de code d'exemple Apple "AdvancedURLConnections".

+0

Merci de pointer vers l'exemple de code Apple. Cela m'aide vraiment beaucoup. Pour une version très simplifiée, veuillez consulter [ma réponse] (http://stackoverflow.com/a/21621522/1432048) à une autre question similaire. – xiang

Questions connexes