2013-02-16 3 views
0

J'ai un gros problème. Je dois POSTER à une URL certains paramètres de mon application. Mais quand j'essaie de le faire dans un objet WebView, il me jette une exception qui dit "Untrusted Certicate" (l'exception est affichée par la méthode en override de WebViewClient onReceivedSslError()). Comment puis-je être en mesure de poignée de main correctement avec le serveur? Pourriez-vous s'il vous plaît me donner quelques conseils? Je reçois fou ...Demande POST via HTTPs avec Android

Vraiment, vraiment merci ...

EDIT: voilà comment j'ai défini ma WebView

webView = (WebView) myFragmentView.findViewById(R.id.webView); 
webView.setWebViewClient(new WebViewClient(){ 
     @Override 
     public void onPageFinished(WebView view, String string){ 
      Log.debug(tag, "URL pagina terminata :"+webView.getUrl()); 
      if(progress!=null) 
       if(progress.isShowing()){progress.dismiss();} 
     } 

     @Override 
     public void onReceivedError(WebView view, 
       int errorCode, 
       String description, 
       String failingUrl) { 
      Log.error(tag, "ERROR:" + description); 
      } 

     @Override 
     public void onReceivedSslError(WebView view, 
       SslErrorHandler handler, SslError error) { 
      super.onReceivedSslError(view, handler, error); 
      Log.error(tag, "SSL Error received: "+ error.getPrimaryError()); 

      handler.proceed(); 
     } 


    }); 

Voilà comment j'ai créé un postRequest dans un WebView

webView.postUrl(url, EncodingUtils.getBytes(postParameters, "base64")); 

Ceci est la sortie logCat:

SSL Error received: 3 - Untrusted Certificate 

Maintenant, googling un peu j'ai vu qu'il est nécessaire de vérifier la validité du certificat et d'importer le trousseau de clés dans un magasin de clés local. Mais le problème est que I'0 ne sais pas où commencer ... :)

+0

Pourriez-vous svp s avez-vous le code que vous avez déjà et pointez-vous sur le problème? – Ksenia

+0

J'ai modifié mon post pour vous donner plus d'informations. Avez-vous besoin d'autre chose? :) Vraiment merci ... –

+0

recevez-vous un certificat non fiable lorsque vous affichez l'URL dans votre navigateur? –

Répondre

1

Si sécurité n'est pas une priorité, vous pouvez essayer d'appeler handler.proceed() dans votre onReceivedSslError(), Ne pas appeler la méthode super .

Si la sécurité est une priorité (et il devrait être):

Je n'ai pas essayé moi-même pour webView, mais essayez de définir votre certificat comme celui-ci: Android WebView setCertificate issues SSL problems

Pour obtenir le réel certificats vous pouvez les charger dans votre navigateur (en acceptant l'avertissement lorsque vous ouvrez l'URL dans le navigateur) et les exporter à partir de là, ou vous pouvez utiliser l'outil openssl comme décrit ici: http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

+0

ok j'essaie ... je vous le ferai savoir !! ;) –

+0

Sans l'invocation des super œuvres super, mais je sais qu'il y a un trou de sécurité. Mais cela signifie que la communication avec le serveur n'est pas cryptée? –

+0

la communication est cryptée, mais l'authentification du serveur n'est pas garantie. Il est vulnérable aux attaques de l'homme dans le milieu. L'attaquant pourrait vous envoyer son CERT auto-signé et vous l'accepteriez volontiers. –