2013-10-14 70 views
0

我正在關注this教程,以實現Android應用和我的服務器之間的https連接。在Android應用中使用SSL

我有一些問題:

  • 密鑰庫getKeystorePassword不identificated像梅託德。
  • createSSLSocketFactory()沒有參數,但它的定義類似於createSSLSocketFactory(最終上下文上下文)
  • 我不undersand如果類「公共類SecureHttpClient 擴展DefaultHttpClient」以前@override clientConnectionManager結束,如果在writen代碼使用安全客戶端部分已經在我的mainActivity插入。

回答

0

,你必須使用該功能,,

/******************************for https request***********************************************/ 
    private HttpClient sslClient(HttpClient client) { 
     try { 
      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; 
       } 
      }; 
      SSLContext ctx = SSLContext.getInstance(getString(R.string.tls)); 
      ctx.init(null, new TrustManager[]{tm}, null); 
      SSLSocketFactory ssf = new MySSLSocketFactory(ctx); 
      ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
      ClientConnectionManager ccm = client.getConnectionManager(); 
      SchemeRegistry sr = ccm.getSchemeRegistry(); 
      sr.register(new Scheme(getString(R.string.https), ssf, 443)); 
      return new DefaultHttpClient(ccm, client.getParams()); 
     } catch (Exception ex) { 
      return null; 
     } 
    } 
    public class MySSLSocketFactory extends SSLSocketFactory { 
     SSLContext sslContext = SSLContext.getInstance(getString(R.string.tls)); 

     public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { 
      super(truststore); 

      TrustManager tm = new X509TrustManager() { 
       public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
       } 

       public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
       } 

       public X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 
      }; 

      sslContext.init(null, new TrustManager[] { tm }, null); 
     } 

     public MySSLSocketFactory(SSLContext context) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, UnrecoverableKeyException { 
      super(null); 
      sslContext = context; 
     } 

     @Override 
     public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { 
      return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); 
     } 

     @Override 
     public Socket createSocket() throws IOException { 
      return sslContext.getSocketFactory().createSocket(); 
     } 
    } 
    /**********************************end********************************************/ 

和U調用像下面描述的上述功能,,,,

// Execute HTTP Post Request 
     HttpClient client = new DefaultHttpClient(); 




//The Line you need to use to call above function 
     HttpClient sslHttpsClient=sslClient(client); 




HttpConnectionParams.setConnectionTimeout(sslHttpsClient.getParams(), 10000); //Timeout Limit 
     HttpResponse response;