文档章节

OkHttp完全解析(五)HTTPS

k
 kim366
发布于 2016/05/13 19:08
字数 643
阅读 14
收藏 0

OkHttp试图平衡连个相互竞争的问题:

   尽可能多的主机连接: 包括运行最新版boringssl的高级主机和运行老版OpenSSL的陈旧主机。

   连接的安全性: 通过证书进行远程web服务器验证和通过强加密保证数据交换的私密性。

当与一个HTTPS服务器进行协商时, OkHttp需要知道应当提供哪个版本的TLS和加密路线。一个想要使连接最大化的客户端可能包含陈旧的TLS版本,以及设计弱化的加密套件。一个想要使安全性更高的严格客户端则被限制使用最新版的TLS和最强的加密套件。

   # MODERN_TLS 是一种连接到现代HTTPS服务器的安全配置。

   # COMPATIBLE_TLS 是一种连接到安全但是不实时的HTTPS服务的安全配置。

   # CLEARTEXT 是一种使用在http://URL中的安全配置。

默认情况下,OkHttp会尝试一个MODERN_TLS连接,如果不可行,则转换到COMPATIBLE_TLS连接。 在特定连接类型中的TLS版本和加密套件会相互转换。例如,在OkHttp2.2中,因为POODLE攻击,OkHttp放弃了对SSL3.0的支持, 在OkHttp2.3中,放弃了对RC4的支持。所以,跟你桌面浏览器一样而言,保持最新版的OkHttp是确保安全的最佳方式。

也可以通过一个自定义的TLS版本集合和加密套件,创建自定义的连接设置。例如,这个配置被限制使用三个相对安全性较高的加密套件。缺点是只支持Android 5.0+和同样的web服务器。


6.1 证书锁定

默认请情况下,OkHttp信任主平台的证书授权。这种策略可以使连接最大化,但是受患于授权机构的攻击,比如 2011 DigiNotar attack。 同时也假设你的HTTPS服务器被同一个授权机构签约。


可以使用CertificatePinner限制哪个认证中心被信任。证书锁定可以增加安全性,但是限制了你的服务器团队更新他们TLS证书的能力。在没有服务器TLS 管理员允许的情况下,不要使用证书锁定。


6.2 自定义信任的证书

   完整的代码实例展示了如何通过你自己的设置替换主平台的证书授权。跟上面一样,在没有服务器TLS管理员守护的情况下,不要使用自定义证书。

 

 

本文转载自:http://blog.csdn.net/oyangyujun/article/details/50039301

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
手写Android网络访问框架OkHttp(简易版)

开篇废话 趁着周末两天的时间,跟着大神的脚步,把我们经常使用的网络框架OkHttp的源码好好跟了一下,初次观看,确实非常容易钻进去,搞得云里雾里,在大神的指导下,才勉强把整个逻辑走通。...

进击的欧阳
05/06
0
0
Eclipse:Unsupported major.minor version 51.0 error

最近在做项目的时候,由于我们提供的 sdk 里面有依赖 OkHttp 和 OkIO,好像从 v2.0 开始,OkHttp 要求 Jdk 1.7。导致 sdk 不能在 JDK 1.6 环境里面运行,为了兼容,我找到了这两个 repo: ht...

Jerikc
2015/08/05
0
0
Android中流行的第三方库资源收集

1、GSON GSON是将JSON解析成POJO的Java库。GSON也可以将POJO解析成JSON。 2、OkHttp OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。默认情况下,OKHttp会自动...

jdroid
2014/05/02
0
0
OkHttp 3.11.0 发布,轻量的 Java 网络请求框架

OkHttp 3.11.0 已发布,OkHttp 是一个轻量的 Java 网络请求框架。 本次更新内容如下: OkHttp's new okhttp-tls submodule tames HTTPS and TLS. OkHttp now supports prior knowledge clear......

淡漠悠然
07/15
0
0
说说在 Android 中如何发送 HTTP 请求

客户端会向服务器发出一条 HTTP 请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对这些数据进行解析与处理。 1 HttpURLConnection 可以使用 HttpURLConnection(官方推荐) 来发...

deniro
06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS三元运算示例

1. topFlag=topFlag ==0?1:0; 等于 if(topFlag=00){ topFlag=1; }else if(topFlag == 1){ topFlag=0; } 2. 5>3?alert('5大'):alert('3大'); 即 if(5>3){alert('5大')}else{alert('3大')}; 注......

森火
今天
0
0
利用Slf4j的MDC跟踪方法调用链

why? 一个web项目通常提供很多URL访问地址, 项目一般都是分层处理,例如Controller——>Service——>DAO。 如果想根据日志查看用户一次请求都走了哪些方法(多数是查错误)。 如果系统是多人...

杨春炼
今天
7
0
Maven介绍及安装

Maven介绍及安装 以下内容是本人早期学习时的笔记,可能比较详实繁琐,现在复习一下Maven,顺便将内容抛出来,供大家一起学习进步。 一、Maven简介 Maven是Apache旗下的一款项目管理工具,是...

星汉
今天
0
0
小程序Aes解密

主要步骤: 1、下载AES源码(JS版) 2、在小程序中新建一个公共的文件夹,把AES源码拷贝进去(注意:需要暴露接口 module.exports = CryptoJS;) 3、添加一个用于加密解密的公共JS,可取名为...

Mr_Tea伯奕
今天
0
0
Go实现文件传输(基本传输可用)

发送端 package mainimport ("fmt""os""net""io")func SendFile(path string, connect net.Conn){file, oerr :=os.Open(path)if oerr !=nil{fmt.Println("Open", oerr)......

CHONGCHEN
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部