2012-11-21 2 views
8

Ich bin konfrontiert mit einer javax.net.ssl.SSLPeerUnverifiedException: Keine Peer-Zertifikat-Ausnahme bei der Arbeit mit Google Place API in Android-Emulator. im Folgenden meine url ist:javax.net.ssl.SSLPeerUnverifiedException: Keine Peer-Zertifikat, während ich arbeite mit Google Place API in Android

https://maps.googleapis.com/maps/api/place/search/json?&location=28.632808,77.218276&radius=1000&sensor=false&key=AIzaSyC3y3fOMTqTkCjNNETQTCKustG7BRk_eVc 

, wenn ich einfach, oben uRL in Browser-Adressleiste einfügen, einfach es gibt Json string.So, ich denke, es keine Notwendigkeit einer Zertifikatsauthentifizierung ist.

Nachdem so viele googeln und gewidmet 2-3 Tage, habe ich verwendet SSLSocketFacory-Klasse von org.apache.http.conn.ssl.SSLSocketFactory-Paket Peer-Zertifikat Fehler zu vermeiden.

unten ist mein Code:

public static HttpClient wrapClient(HttpClient base) { 
     try { 
      SSLContext ctx = SSLContext.getInstance("TLS"); 
      X509TrustManager tm = new X509TrustManager() { 

       public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { 
       } 

       public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { 
       } 

       public X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 
      }; 
      X509HostnameVerifier verifier = new X509HostnameVerifier() { 

       public void verify(String string, SSLSocket ssls) throws IOException { 
       } 

       public void verify(String string, X509Certificate xc) throws SSLException { 
       } 

       public void verify(String string, String[] strings, String[] strings1) throws SSLException { 
       } 

       public boolean verify(String string, SSLSession ssls) { 
        return true; 
       } 
      }; 
      ctx.init(null, new TrustManager[]{tm}, null); 
      SSLSocketFactory ssf = new SSLSocketFactory(ctx); 
      ssf.setHostnameVerifier(verifier); 
      ClientConnectionManager ccm = base.getConnectionManager(); 
      SchemeRegistry sr = ccm.getSchemeRegistry(); 
      sr.register(new Scheme("https", ssf, 443)); 
      return new DefaultHttpClient(ccm, base.getParams()); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
    } 

I android api 16 verwende, und wenn ich SSLSocketFactory (SSLSocketContext) Konstruktor verwendet, Eclipse gibt compliation Fehler, also habe ich eine Menge und Download jar SSLSocketFactory suchen zu müssen (SSLSocketContext), das „Httpclient-4.1.1.jar“ ist file.and i auch um dieses Glas in dem Projekterstellungspfad festgelegt, hat höchsten priority.Now gesetzt erhalte ich folgende Warnung:

VFY:unable to resolve direct method 4253:Lorg/apache/http/conn/ssl/SSLSocketFactory.<init> 

Und folgende lange Fehlerspur, verursacht durch

java.lang.NoSuchMethodError : org.apace.http.conn.ssl.SSLSocketFactory.<init> 

Bitte, hilf mir, ich weiß nicht, wo ich falsch liege.

+1

es auf einem realen Gerät passiert das? Welche Version von Android emuliert Ihr Emulator? Die Verwendung eines 'no check' Trust-Managers ist eine * sehr schlechte * Idee, also nicht. –

+0

Das Problem wurde behoben. Vielen Dank stackoverflow.Der unten stehende Link hat mein Problem gelöst. http://StackOverflow.com/questions/7622004/android-making-https-request/13485550#13485550 – ved

+0

Tun Sie dies nicht. Das Deaktivieren von SSL ist ein großes Sicherheitsloch. Sorry für alle Caps. – Bishnu

Antwort

2

Auch ich hatte dieses Problem, und durchsuchte viele Dinge in Internet, aber ich durch einen einfachen Schritt

Ich weiß nicht, die genaue Ursache gelöst, aber ich löste es durch Emulator neu starten oder erstellen ein Emulator und Führen sie das Projekt in diesem neuen Emulator

ich werde nicht sagen, dass dies die genaue Antwort ist aber Probieren sie es aus, bevor sie Codierung mit komplexen Codes modifizieren

+0

Das war genau mein Problem, sollte dies früher anstelle von komplexer Codierung versuchen – Ghashange

Verwandte Themen