Tamic /http://m.itdecent.cn/p/efcbf795e95b
尊重原創(chuàng),授權(quán)請(qǐng)?jiān)L問(wèn):http://www.banquanyin.com/u/101701130004540
之前出的一篇文章 - Retrofit 2.0 超能實(shí)踐,完美支持Https傳輸詳細(xì)介紹了使用okhttp支持https的步驟,很多人要的是所以一切Https都要免信任,實(shí)則就是全部放開(kāi),那么下面的代碼就是介紹如何將okHttp進(jìn)行免信任Https鏈接。

信任所有https
信任所有https請(qǐng)求,也就是放行所有的證書(shū)驗(yàn)證,具體可以直接將OkHttpClient的HostnameVerifier設(shè)置為true
OkHttpClient client = new OkHttpClient();
client.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] x509Certificates,
String s) throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] x509Certificates,
String s) throws java.security.cert.CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[] {};
}
} };
try {
//構(gòu)造自己的SSLContext
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
client.setSslSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
接著設(shè)置協(xié)議為 1.1(Protocol.HTTP_1_1)
client.protocols(Collections.singletonList(Protocol.HTTP_1_1))
.build();
目前OKhttp3.5 已經(jīng)將setHostnameVerifier函數(shù) 放到builder當(dāng)中了,你可以使用 OkHttpClientbuilder.HostnameVerifier進(jìn)行操作,實(shí)則內(nèi)部調(diào)用都一樣。
衍生
目前眾多框架使用okhttp, 著名的有picasso,glide, Retrofit等,通過(guò)上面的姿勢(shì),就能很好的讓這些框架默認(rèn)支持Https鏈接。
今天的文章比較簡(jiǎn)短,但實(shí)用性比價(jià)高
閱讀推薦
Tamic /http://m.itdecent.cn/p/efcbf795e95b
尊重原創(chuàng),授權(quán)請(qǐng)?jiān)L問(wèn):http://www.banquanyin.com/u/101701130004540