AsyncHttpClient实现https,并且实现SSL双向验证

来源:互联网 发布:迪士尼乐园全套源码 编辑:程序博客网 时间:2024/06/10 17:44

最近由于项目要从http转向https,所以今天折腾了一天搞掂

项目网络请求框架:AsyncHttpClient

具体实现可参考该作者文章:http://www.jianshu.com/p/e9d655281f82 感谢该作者大大


1:先要生成p12文件,在cmd进入到你证书的文件夹;


通过git实现命令openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

【如果你的git没有openSSL,那就自己搞一个吧,具体问度娘】

其中,橙色文件名称就是服务器给你的证书名称


2:生成信任的服务器端证书,即.bks或者.truststore文件

java环境通过keystore 生成

具体可参考文章:http://blog.csdn.net/zlele0326/article/details/52054897 感谢该作者大大的记录

p12和bks文件生成后就是代码上添加SKK

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 = "123123";//此密码是你生成证书时输入的密码private static final String KEY_STORE_TRUST_PASSWORD = "123123";private static KeyStore keyStore;private static KeyStore trustStore;private static SSLSocketFactory getSocketFactory() {SSLSocketFactory socketFactory=null;try {// 服务器端需要验证的客户端证书keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);// 客户端信任的服务器端证书trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);//res/raw/文件夹下的.p12文件    InputStream ksIn = Tapplication.tapp.getResources().openRawResource(R.raw.client);//res/raw/文件夹下的.bks文件    InputStream tsIn = Tapplication.tapp.getResources().openRawResource(R.raw.server);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;}

AsyncHttpClient devClient = new AsyncHttpClient();devClient.setSSLSocketFactory(getSocketFactory());

这时候你打包的时候你会发现你的as无法正常安装apk,原因是前面你使用keystore生成证书的时候修改了jdk,所以你把你加上去的东西都还原,你的as就可以正常安装apk了

至此,你的AsyncHttpClient就可以支持https外加SSL验证了


0 0