今年夏天在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));
至此大功告成,希望對大夥有用,不懂的可以問我