2013-10-14 66 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;