如果是双向https验证,需要两个证书:
- 服务器端需要验证的客户端证书:一般后缀是**
.p12**
- 客户端信任的服务器端证书,一般后缀是**
.bks或者.truststore**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| private static final String KEY_STORE_TYPE_BKS = "bks"; private static final String KEY_STORE_TYPE_P12 = "PKCS12"; private static final String KEY_STORE_PASSWORD = "123456"; private static final String KEY_STORE_TRUST_PASSWORD = "123456"; private SSLSocketFactory getSocketFactory() { SSLSocketFactory socketFactory=null; try { keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);
trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);
InputStream ksIn = this.getResources().openRawResource(R.raw.client); InputStream tsIn = this.getResources().openRawResource(R.raw.server_bks); try { keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray()); trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray()); } catch (Exception e) { e.printStackTrace(); } finally { try { ksIn.close(); } catch (Exception ignore) { } try { tsIn.close(); } catch (Exception ignore) { } }
socketFactory = new SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore); socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); } catch (KeyManagementException e) { e.printStackTrace(); } catch (UnrecoverableKeyException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return socketFactory; }
|
然后在代码中调用一下就行了
1 2
| AsyncHttpClient mAsyncHttpClient = new AsyncHttpClient(); mAsyncHttpClient.setSSLSocketFactory(getSocketFactory());
|
原始链接:http://www.jianshu.com/p/e9d655281f82