当咱们谈网络时,咱们谈些什么(3)Https

最近参与的项目中,因为使用了自签名的Https,因为以前的项目中并无接触过Https,因此在接入以后出现了一些问题。在进行网络请求的时候抛出了以下异常。java

java.security.cert.CertPathValidatorException:
 Trust anchor for certification path not found

同时在使用WebView进行装载页面的时候,也出现了页面空白的问题。借此机会,准备对Https进行一个系统的学习。从为何要使用Https,Https的实现原理,在Android中Https的应用。web

为何须要Https

  • 内容劫持

运营商劫持

上面的几个图,在平时咱们使用手机的过程当中是常常出现的一个现象。产生上述问题的缘由是咱们在数据传输的时候经过http进行传输致使了被运营商劫持,而后修改了其中的内容。算法

  • 敏感数据

同时也会有一些我的开启wifi,而后对其中内容作嗅探,获取其中的敏感数据。为了提高用户体验,采用Https是一个不错的方式,相比于采用本身的协议方便不少。浏览器

补充知识

Https是什么?

HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密数据包。
HTTPS的主要思想是在不安全的网络上建立一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防御。安全

SSL协议在通讯过程当中起了两个做用:服务器

一、确保通讯双方身份没有伪造,经过数字证书实现。网络

二、确保与服务器之间的通信不能被第三方窃取、修改。并发

了解https通讯过程还需知道两种加密方式:非对称加密和对称加密。客户端与服务器进行安全数据交互以前,需在非对称秘钥的加密保护下生成用于会话期数据加密的对称秘钥。函数

3.1 对称加密算法
对称加密是指:加密和解密使用相同密钥的算法。它要求发送方和接收方在安全通讯以前,商定一个对称密钥。对称算法的安全性彻底依赖于密钥,密钥泄漏就意味着任何人均可以对他们发送或接收的消息解密,因此密钥的保密性对通讯相当重要。web安全

3.1.1 对称加密又分为两种模式:流加密和分组加密

流加密是将消息做为字节流对待,而且使用数学函数分别做用在每个字节位上。使用流加密时,每加密一次,相同的明文位会转换成不一样的密文位。流加密使用了密钥流生成器,它生成的字节流与明文字节流进行异或,从而生成密文。

分组加密是将消息划分为若干个分组,这些分组随后会经过数学函数进行处理,每次一个分组。假设使用64位的分组密码,此时若是消息长度为640位,就会被划分红10个64位的分组(若是最后一个分组长度不到64,则用0补齐以后加到64位),每一个分组都用一系列数学公式进行处理,最后获得10个加密文本分组。而后,将这条密文消息发送给对端。对端必须拥有相同的分组密码,以相反的顺序对10个密文分组使用前面的算法解密,最终获得明文消息。比较经常使用的分组加密算法有DES、3DES、AES。其中DES是比较老的加密算法,如今已经被证实不安全。而3DES是一个过渡的加密算法,至关于在DES基础上进行三重运算来提升安全性,但其本质上仍是和DES算法一致。而AES是DES算法的替代算法,是如今最安全的对称加密算法之一。

3.1.2 对称加密算法的优缺点:

优势:计算量小、加密速度快、加密效率高。

缺点:

(1)交易双方都使用一样密钥,安全性得不到保证;

(2)每次使用对称加密算法时,都须要使用其余人不知道的唯一密钥,这会使得发收信息双方所拥有的钥匙数量呈几何级数增加,密钥管理成为负担。

在非对称密钥交换算法出现之前,对称加密的最主要缺陷就是不知道如何在通讯双方之间传输对称密钥,而又不让中间人窃取。非对称密钥交换算法诞生以后,专门针对对称密钥传输作加解密,使得对称密钥的交互传输变得很是安全了。
非对称密钥交换算法自己很是复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等等一系列极其复杂的过程,做者本人也没有研究彻底透彻。常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。涉及到比较复杂的数学问题。其中,最经典也是最经常使用的是RSA算法。

3.2.1 非对称加密相比对称加密更加安全,但也存在两个致命的缺点:
(1)CPU计算资源消耗很是大。一次彻底TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只至关于非对称加密的0.1%。若是后续的应用层数据传输过程也使用非对称加解密,那么CPU性能开销太庞大,服务器是根本没法承受的。赛门特克给出的实验数据显示,加解密同等数量的文件,非对称算法消耗的CPU资源是对称算法的1000倍以上。

(2)非对称加密算法对加密内容的长度有限制,不能超过公钥长度。好比如今经常使用的公钥长度是2048位,意味着待加密内容不能超过256个字节。

因此非对称加解密(极端消耗CPU资源)目前只能用来做对称密钥交换或者CA签名,不适合用来作应用层内容传输的加解密。

SSL介绍:

安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。

SSL是Netscape于1994年开发的,后来成为了世界上最著名的web安全机制,全部主要的浏览器都支持SSL协议

目前有三个版本:二、三、3.1,最经常使用的是第3版,是1995年发布的。

SSL协议的三个特性

① 保密:在握手协议中定义了会话密钥后,全部的消息都被加密。

② 鉴别:可选的客户端认证,和强制的服务器端认证。

③ 完整性:传送的消息包括消息完整性检查(使用MAC)。

SSL的位置

SSL介于应用层和TCP层之间。应用层数据再也不直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增长本身的SSL头。

Https创建过程?

SSL链接创建过程
客户端和服务器交换数据以前有个握手协议,具体过程是:

一、客户端初始化支持的加密算法、压缩算法、SSL协议版本,并向服务器发起消息结构体为client hello的链接

二、服务端收到消息,根据客户端提供的加密算法列表、压缩算法列表来选取后续使用的对称加密算法、压缩算法和SSL协议版本,并返回结构体为server hello的消息。

三、若是客户端须要服务器身份认证,服务器在返回server hello的消息后需马上返回数字证书信息(一般服务器认证是必须的),并发送hello done的消息。

四、客户端验证证书是否有效,并发送用证书公钥加密的对称秘钥。

五、服务器收到加密的对称秘钥,使用本身的私钥解密,并发送经过对称秘钥加密的的会话完成信息 (finish信息)。

证书校验过程

颁发证书的机构会将证书内容使用指定的哈希函数生成内容hash,而后用本身的私钥加密哈希造成签名。证书指纹用于肯定证书没有被修改。解密验证过程如上右图,若是最终获得的签名与客户端使用指定的签名算法获得的签名不一致,则证书是不可信的。

证书校验过程

参考资料

Android安全开发之安全使用HTTPS
https通讯原理

相关文章
相关标签/搜索