2013-10-14 3 views
0

Я следую this учебному пособию по внедрению https-соединения между Android-приложением и моим сервером.Использование SSL с Android-приложением

У меня есть некоторые проблемы:

  • и хранилищ ключей getKeystorePassword не identificated как методич.
  • createSSLSocketFactory() не имеет параметров, но определяется как createSSLSocketFactory (конечный контекст контекста).
  • Я не undersand, если класс «класс SecureHttpClient общественного расширяет DefaultHttpClient» завершится до @Override clientConnectionManager и если код прописан в Использование Secure Client раздел должен быть вставлен в моей 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; 
Смежные вопросы