2012-11-21 30 views
8

Tôi đang đối mặt với một javax.net.ssl.SSLPeerUnverifiedException: Không có ngoại lệ chứng chỉ ngang hàng khi làm việc với google place api trong trình giả lập Android. Dưới đây là url của tôi:javax.net.ssl.SSLPeerUnverifiedException: Không có chứng chỉ ngang hàng trong khi tôi đang làm việc với google place api trong android

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

khi tôi chỉ cần dán url trên thanh địa chỉ trình duyệt, nó đơn giản cho chuỗi Json. Tôi nghĩ không cần xác thực chứng chỉ.

Sau khi thực hiện rất nhiều công việc và dành 2-3 ngày, tôi đã sử dụng lớp SSLSocketFacory của gói org.apache.http.conn.ssl.SSLSocketFactory để tránh lỗi chứng chỉ ngang hàng.

dưới đây là mã của tôi:

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; 
     } 
    } 

Tôi đang sử dụng android api 16, và khi tôi sử dụng SSLSocketFactory (SSLSocketContext) constructor, nhật thực toàn phần cho lỗi compliation, vì vậy tôi đã tìm kiếm rất nhiều và tải jar có SSLSocketFactory (SSLSocketContext), đó là "httpclient-4.1.1.jar" file.And tôi cũng thiết lập thứ tự mà jar trong dự án xây dựng đường, đã thiết priority.Now cao nhất tôi nhận được cảnh báo sau đây:

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

Và sau dấu vết lỗi dài gây ra bởi

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

Xin vui lòng, giúp tôi Tôi không biết, nơi tôi sai.

+1

Liệu nó xảy ra trên một thiết bị thật không? Phiên bản giả lập của Android là gì? Sử dụng trình quản lý tin cậy 'no check' là một ý tưởng * rất tồi *, vì vậy đừng. –

+0

Sự cố đã được giải quyết. Cảm ơn bạn rất nhiều stackoverflow.Các liên kết dưới đây đã giải quyết vấn đề của tôi. http://stackoverflow.com/questions/7622004/android-making-https-request/13485550#13485550 – ved

+0

KHÔNG LÀM NÀY. Tắt SSL là một lỗ hổng bảo mật lớn. Xin lỗi cho tất cả các mũ. – Bishnu

Trả lời

2

tôi cũng có vấn đề này, và đã tìm kiếm rất nhiều điều trong Internet, nhưng tôi giải quyết bằng một bước đơn giản

Tôi không biết nguyên nhân chính xác, Nhưng tôi giải quyết nó bằng Khởi động lại Emulator hoặc tạo một Emulator mỚI, và chạy dự án ở chỗ Emulator mới

tôi sẽ không nói điều này là câu trả lời chính xác nhưng Hãy thử nó trước khi sửa đổi mã hóa của bạn với mã Complex

+0

Đó là vấn đề chính xác của tôi, nên thử điều này sớm hơn thay vì mã hóa phức tạp – Ghashange

Các vấn đề liên quan