2017-01-21 8 views
0

AsyncHttpclientを使用してキーストアにssl certificateを追加します。今私は、コード、私は、以下のようにすべての証明書を受け入れるAsyncHttpClientを使用してキーストアにSSL証明書を追加するandroid

socketFactory.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 

しかし、私はすべての証明書を受け入れるようにしたいDNTてる

private AsyncHttpClient asyncHttpClient; 
    private AppPreference mAppPreferences; 
    private UserPreference mUserPreference; 
    public CLHttpClient(Context context) { 
     this.context = context; 
     MySSLSocketFactory socketFactory = null; 
     try { 
      KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
      trustStore.load(null, null); 
      socketFactory = new MySSLSocketFactory(trustStore); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     asyncHttpClient = new AsyncHttpClient(); 
     asyncHttpClient.setTimeout(30 * 1000); 
     if (socketFactory != null) { 
      socketFactory.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
      asyncHttpClient.setSSLSocketFactory(socketFactory); 
     } 
     asyncHttpClient.setMaxRetriesAndTimeout(1, 30000); 
     asyncHttpClient.setUserAgent("android-async-http-1.4.9"); 
     mAppPreferences = new AppPreference(context); 
     mUserPreference = new UserPreference(context); 
    } 

以下のようにすべての証明書を受け入れています。 ALLOW_ALL_HOSTNAME_VERIFIERではなく、特定の証明書を受け入れるように制限したいと考えています。私にこのことを提案してもらえますか? 私は自分のプロジェクトに'com.loopj.android:android-async-http:1.4.9'というコンパイルを使用しています。

答えて

0

は、私は私のために

private static final String TAG = CLHttpClient.class.getSimpleName(); 
     private Context context; 
     private AsyncHttpClient asyncHttpClient; 
     private AppPreference mAppPreferences; 
     private UserPreference mUserPreference; 
     public CLHttpClient(Context context) { 
      this.context = context; 
      MySSLSocketFactory socketFactory = null; 
      try { 
    //   KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
    //   trustStore.load(null, null); 
       socketFactory = new MySSLSocketFactory(buildKeyStore(context, R.raw.certificate_ca)); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      asyncHttpClient = new AsyncHttpClient(); 
      asyncHttpClient.setTimeout(30 * 1000); 
      if (socketFactory != null) { 
    //   socketFactory.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
       asyncHttpClient.setSSLSocketFactory(socketFactory); 
      } 
      asyncHttpClient.setMaxRetriesAndTimeout(1, 30000); 
      asyncHttpClient.setUserAgent("android-async-http-1.4.9"); 
      mAppPreferences = new AppPreference(context); 
      mUserPreference = new UserPreference(context); 
     } 

と以下の方法、

private static KeyStore buildKeyStore(Context context, int certRawResId) { 
     // init a default key store 
     String keyStoreType = KeyStore.getDefaultType(); 
     KeyStore keyStore = null; 
     try { 
      keyStore = KeyStore.getInstance(keyStoreType); 
      keyStore.load(null, null); 
      // read and add certificate authority 
      Certificate cert = readCert(context, certRawResId); 
      keyStore.setCertificateEntry("ca", cert); 
     } catch (KeyStoreException e) { 
      e.printStackTrace(); 
     } catch (CertificateException e) { 
      e.printStackTrace(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return keyStore; 
    } 

    private static Certificate readCert(Context context, int certResourceId) { 
     // read certificate resource 
     InputStream caInput = context.getResources().openRawResource(certResourceId); 

     Certificate ca=null; 
     try { 
      // generate a certificate 
      CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
      ca = cf.generateCertificate(caInput); 
     } catch (CertificateException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       caInput.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return ca; 
    } 

それの作品は、以下のように私のコードを変更しました。ハッピーコーディング...

関連する問題