今年夏天在WWDC2016开发者大会上,苹果宣布,必须在2017年1月1日之前实现所有的能够App安全地接入服务器,即“所有iOS应用将必须支持ATS(App Transport Security)安全标准”,从而提升应用和系统安全性。所以以后开发者应用应切换至HTTPS服务。
虽然Android没这么要求,但一个公司接口不可能出两套,一套支持ios https 一套支持Android http,故今日写此文,希望Android的同胞少走弯路。
https协议和http有着很大的区别。简单的来讲,http效率更高,https安全性更高。
下面举例基于async-http-client怎样访问htpps:
1、首先获得证书,由后台提供,如果后台提供的证书是.crt和.key文件,需要让后台转换为.p12文件,也可以自己转换,不过要配置环境下载工具,闲的麻烦就直接让后台提供了。
2、导入async-http-client jar包
3、配置证书,获取MySSLSocketFactory对象
private static MySSLSocketFactory getSocketFactory(Context context) {
// TODO Auto-generated method stub
MySSLSocketFactory sslFactory = null;
try {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream instream = context.getResources().openRawResource(
R.raw.server);//后台拿到的.p12证书
keyStore.load(instream, "后台拿到的.p12证书密码".toCharArray());
sslFactory = new MySSLSocketFactory(keyStore);
} catch (KeyStoreException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (CertificateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnrecoverableKeyException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sslFactory;
}
4、 async-http-client添加证书请求
private static AsyncHttpClient client = new AsyncHttpClient();
client.setSSLSocketFactory(getSocketFactory(context));
至此大功告成,希望对大伙有用,不懂的可以问我