2010-10-06 25 views
3

Je tente de me connecter à un serveur HTTPS local en utilisant le fichier apache DefaultHttpClient sur un appareil Android.Android DefaultHttpClient accepte tous les certificats pour l'aide de session SSL

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://192.168.1.121:4113/services"); 
... header and content filling in ... 
HttpResponse response = httpclient.execute(httppost); 

Je reçois une erreur de « javax.net.ssl ​​SSLException: certificat de serveur non sécurisé » lors de l'exécution de .Execute. Je veux simplement permettre à n'importe quel certificat de fonctionner, indépendamment du fait qu'il soit ou non dans la chaîne de clé androïde. J'ai passé environ 40 heures à faire des recherches et essayer de trouver une solution à ce problème. J'ai vu beaucoup d'exemples de comment faire ceci mais aucun jusqu'ici n'a fonctionné dans l'androïde; ils semblent ne fonctionner que pour JAVA. Est-ce que quelqu'un sait comment configurer, ou remplacer la validation de certificat utilisée par Apache HttpClient dans Android de sorte qu'il approuvera simplement tous les certificats pour une connexion DefaultHttpClient?

Je vous remercie de votre aimable réponse

+0

duplication possible de [HTTPS GET (SSL) avec Android et certificat de serveur auto-signé] (http://stackoverflow.com/questions/3761737/https-get-ssl-with-android-and-self-signed- serveur-certificat) –

Répondre

1

Regardez ce tutoriel http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/

Le tutoriel est basé sur HttpClient Apache et explique comment utiliser le SSLSocketFactory faire confiance aux certificats définis dans votre propre keystore (également expliqué comment vous pouvez le créer avec le fournisseur BouncyCastle).

Je l'ai testé et ça marche très bien. À mon avis, c'est la façon sécurisée.

+0

Merci d'avoir essayé mais ce n'est pas ce que je veux faire. Je ne veux pas ajouter le certificat dans mon fichier de clés. Je réalise pleinement les implications de sécurité de ce que je fais. C'est pour un produit commercial et je ne peux pas attendre que les clients sachent comment effectuer ces actions. J'ai trouvé plusieurs exemples de résoudre cela en ajoutant le CERT au magasin de clés, mais personne n'a pu le contourner complètement. –

+0

Je vois. Et le passage aux anciennes bibliothèques java.net n'est pas une option pour vous? Avec ceux-ci, vous pouvez facilement accepter tous les certificats. Peut-être que cela aide: http://stackoverflow.com/questions/2703161/apache-httpclient-4-0-ignore-ssl-certificate-errors Je n'ai pas essayé. – saxos

+0

Juste oublié de mentionner: http://mobile.synyx.de/2010/06/android-and-self-signed-ssl-certificates/ Ce gars ici met en œuvre une propre SSLSocketFactory, qui devrait accepter tous les auto-signé certs. – saxos