Okhttp现在已经被用到很多框架中,但是很多人对SSL这块不是很熟悉,本篇简单的介绍前怎么使用okhttp进行对Http降级处理,支持到Http。SSL原理请自行找资料看,这快资料目前成熟的文章还是很多得。小长假开始了,出去浪了,本人到10号以后才会推文!
之前出的一篇文章 Retrofit 2.0 超能实践,完美支持Https传输详细介绍了使用okhttp支持https的步骤,很多人要的是所以一切Https都要免信任,实则就是全部放开,那么下面的代码就是介绍如何将okHttp进行免信任Https链接。
信任所有Https
信任所有https请求,也就是放行所有的证书验证可以直接将OkHttpClient
的HostnameVerifie
r设置为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 {
//构造自己的SSLContext
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
client.setSslSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
接着设置协议模式为升级到1.1 (Protocol.HTTP_1_1)
代码语言:javascript复制 client.protocols(Collections.singletonList(Protocol.HTTP_1_1))
.build();
目前OKhttp3.5 已经将setHostnameVerifier函数 放到builder当中了,你可以使用 OkHttpClientbuilder.HostnameVerifier进行操作,实则内部调用都一样。
衍生
目前众多框架使用okhttp, 著名的有picasso,glide, retrofit等,通过上面的姿势,就能很好的让这些框架默认支持Https链接。
今天的文章比较简短,但实用性比较高。
猜你喜欢
Retrofit/Okhttp 网络接口加固技术实践(上)
Retrofit/Okhttp API接口加固技术实践(下)
技术 - 资讯 - 感悟
END