okhttp3.0使用https访问网络
来源:互联网 发布:网络流行词大全 编辑:程序博客网 时间:2024/05/16 14:29
一.okhttp信任所有证书(不建议使用)
1.新TrustAllcert类实现X509TrustManager接口:
public class TrustAllCerts implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) {} @Override public void checkServerTrusted(X509Certificate[] chain, String authType) {} @Override public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];} }
2.初始化OKHttpClient进行配置:
OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); builder.sslSocketFactory(createSSLSocketFactory()); builder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); private static SSLSocketFactory createSSLSocketFactory() { SSLSocketFactory ssfFactory = null; try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom()); ssfFactory = sc.getSocketFactory(); } catch (Exception e) { } return ssfFactory; }
二.okhttp使用自签证书(建议)
1.将证书(一般是cer结尾的文件)放到工程的assets里面.
2. 将证书的流数据传入生成SSLSocketFactory .
public SSLSocketFactory getSslSocketFactory(InputStream certificates) { SSLContext sslContext = null; try { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); Certificate ca; try { ca = certificateFactory.generateCertificate(certificates); } finally { certificates.close(); } // Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); // Create a TrustManager that trusts the CAs in our KeyStore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); // Create an SSLContext that uses our TrustManager sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); } catch (Exception e) { e.printStackTrace(); } return sslContext != null ? sslContext.getSocketFactory() : null; }
注意:这里可以将证书放到assets文件夹里面然后获取:
InputStream inputStream = null; try { inputStream = BaseApplication.getmAppContext().getAssets().open("s12306.cer"); } catch (IOException e) { e.printStackTrace(); }
也可以将证书copy出来定义成字符串常量进行设置(这样就不用将证书打包到apk里面了):
private String BOOK12306 = "这里填写上证书"InputStream inputStream1 = null; try { inputStream1 = new ByteArrayInputStream(BOOK12306.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }
3.对okhttp进行设置就可以了.
OkHttpClient okHttpClient = new OkHttpClient.Builder() .sslSocketFactory(getSslSocketFactory(inputStream)) .readTimeout(7676, TimeUnit.MILLISECONDS) .connectTimeout(7676, TimeUnit.MILLISECONDS) .addInterceptor(logInterceptor) .addInterceptor(interceptor) .build();
阅读全文
0 0
- okhttp3.0使用https访问网络
- 使用Https进行网络访问
- 访问网络的框架(Volley和OkHttp3)使用
- okhttp3.0忽略https证书
- 使用OkHttp访问ssl(https)网络
- iOS 使用Https访问网络(一)
- 安卓使用https进行网络访问
- OkHttp3网络协议的使用
- afn https网络访问
- 网络请求框架(OKHttp3.0)
- okHttp3.0获取网络数据
- Android网络访问之http、https、 cookie的使用
- App内访问的网络必须使用HTTPS协议
- Android OkHttp3网络请求框架使用入门
- 使用OkHttp3网络请求的错误解析
- 使用okhttp3简单执行网络请求
- 火热轻量级网络框架okhttp3的使用
- tomcat使用HTTPS访问
- Hive自定义UDF和聚合函数UDAF
- 关于Installation failed的情况及解决方案
- Git常用命令
- 初识小波变换(一)
- 浅谈Three.js源码-render之WebGLBackground.js
- okhttp3.0使用https访问网络
- 如何使用IntentService
- ajax的beforeSend 提交等待问题 (ajaxSubmit相同)
- 基于对比度滤波的显著区域检测-SF(Saliency Filters: Contrast Based Filtering for Salient Region Detection)
- 常见oracle错误代码ORA-xxxxx及其解决方法(持续更行中)
- ChildNodes VS Children
- python全双工聊天窗口编程学习之旅
- 基于struts2开发的登录模块(未连数据库)
- 机器学习中的训练集,验证集及测试集的关系