最近由于项目要从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.youkuaiyun.com/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验证了