基于OKHttp实现对Https的支持
2017-04-14 08:55
267 查看
OKHttp版本:OKHttp3.6.0
准备工作:
Module的build.gradle文件中,添加依赖
}
实现步骤:
第一步:在Module的src ---> main下新建一个assets的文件夹,然后将证书文件放入(证书文件一般由后台人员通过jdk命令制作,然后部署在服务器上,我们需要的是后缀名为.cer的文件),如图:
第二步:提供一个构造方法,将证书解析成流以参数形式传入,如下:
准备工作:
Module的build.gradle文件中,添加依赖
dependencies { compile 'com.squareup.okhttp3:okhttp:3.6.0'
}
实现步骤:
第一步:在Module的src ---> main下新建一个assets的文件夹,然后将证书文件放入(证书文件一般由后台人员通过jdk命令制作,然后部署在服务器上,我们需要的是后缀名为.cer的文件),如图:
第二步:提供一个构造方法,将证书解析成流以参数形式传入,如下:
private static OkHttpClient okHttpClient; /** * 获取oKHttpClient * certificates 证书信息 没有就传null * @return */ public static OkHttpClient getOkHttpClient(Application appContext,InputStream... certificates) { if (okHttpClient == null) {
File sdcache = appContext.getExternalCacheDir(); int cacheSize = 10 * 1024 * 1024; OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(20, TimeUnit.SECONDS) .writeTimeout(20, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .cache(new Cache(sdcache.getAbsoluteFile(), cacheSize)); if (certificates != null){ builder.sslSocketFactory(getSSLSocketFactory(certificates)); } okHttpClient = builder.build(); } return okHttpClient; }
/** * 获取SSLSocketFactory * * @param certificates 证书流文件 * @return */ private static SSLSocketFactory getSSLSocketFactory(InputStream... certificates) { try { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(null); int index = 0; for (InputStream certificate : certificates) { String certificateAlias = Integer.toString(index++); keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate)); try { if (certificate != null) certificate.close(); } catch (IOException e) { } } SSLContext sslContext = SSLContext.getInstance("TLS"); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom()); return sslContext.getSocketFactory(); } catch (Exception e) { e.printStackTrace(); } return null; }
第三步:调用第二步提供的构造方法,传入第一步的证书信息,如下:
xxxUtil.getOkHttpClient(context.getAssets().open("xxx.cer"));
这里的xxx.cer和assets下的证书文件名要一致,否则找不到证书文件。
相关文章推荐
- Android OkHttp实现HTTPS访问,支持Android 4.X系统HTTPS访问
- okhttp+Retrofit+gson实现的基于https的服务器实现范例
- openwrt linux portal 实现 支持 https 支持基于时长和流量控制
- Android 基于OkHttp的下载,支持https,断点下载,优化下载速度
- Openssl:构建CA的过程并实现web服务基于https访问的网络架构
- Openssl:构建CA的过程并实现web服务基于https访问的网络架构
- 基于安全性考虑的网上招投标系统(https的实现)
- 使用IIS Express 7.5实现支持Https的Silverlight登录
- C++实现的huffman与canonical huffman的压缩解压缩系统,支持基于单词的压缩解压缩
- 二、基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式
- 基于openssl实现C/S架构中的https会话 推荐
- 基于Direct3D实现简单的粒子系统(二) - 增加LUA脚本支持
- 自建的CA配置基于mod_ssl模块实现对ssl的支持
- 基于http live streaming视频直播在android上的实现(版本更新,支持高清AAC视频)
- 基于HTTP缓存轻松实现客户端应用的离线支持及网络优化
- 纯CSS实现容器基于窗口垂直居中(仅支持IE8+及现代浏览器)
- 基于Qtopia 的拨打接听电话客户端 实现拨号及接听 支持来电显示
- 实现支付宝接口时url的构造,主要解决服务器不支持https的问题
- 基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
- 基于jQuery实现类似Google+圈子选择功能插件(支持键盘事件)