1.HTTP概述
HTTP全称为Hyper Text Transfer Protocol,超文本传输协议。HTTP协议属于应用层协议,它是互联网上应用最广泛的一种网络协议,所有的WWW文件都必须遵守该协议标准。
自1991年诞生的HTTP/0.9协议已不再使用,但1996推出的HTTP/1.0、1999年推出的HTTP/1.1、2015年推出的HTTP2协议仍然共存于互联网中(HTTP/1.0在企业内网中还在广为使用,例如Nginx与上游的默认协议还是1.0版本),即将面世的HTTP3协议的加入,将会进一步增加协议适配的复杂度。
HTTP使用了可靠的数据传输协议——TCP协议,不会造成数据丢失和损坏。
2.HTTP传输过程
HTTP一般用于明文数据传输,访问过程如下图所示:
从上图看,因为是明文传输,客户端发出的请求容易被黑客截获,如果此时黑客冒充服务器,则可返回任意信息给客户端,从而不被客户端察觉。
2.1.队头阻塞
HTTP中,有“队头阻塞”现象,指的是:当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端延迟收不到数据。
队头阻塞的常用解决方案:
(1)将同一页面的资源分散到不同域名下,提示连接上限。Chrome,对于同一个域名允许同时建立6个TCP持久连接,使用TCP连接时,虽然能共用一个TCP管道,但在一个管道中同一时刻只能处理一个请求。
(2)Sprinting合并多张小图为一张大图,在用JavaScript或CSS将小图重新分割。
(3)内联,将图片的原始数据嵌入在CSS文件里面的URL里,减少网络请求次数。
2.2.HTTP风险
HTTP有以下风险:
(1)窃听风险:黑客可获得通信内容。
(2)篡改风险,黑客可修改通信内容。
(3)冒充风险:黑客可冒充他人身份参与通信。
3.HTTPS传输过程
为了规避HTTP的风险,我们选择对传输信息进行加密。即产生了对称加密HTTPS和非对称加密HTTPS。
3.1.对称加密HTTPS
客户端和服务端拥有相同的密钥,如下图所示:
对称加密HTTPS有以下两个缺点:
(1)不同客户端、服务器数量庞大,双方都需要维护大量的密钥,维护成本高。
(2)每个客户端、服务器的安全级别不同,密钥极易泄漏。
为了解决对称密钥维护繁琐的问题,我们可以选择使用非对称加密。
3.2.非对称加密HTTPS
非对称加密HTTPS中,客户端用公钥对请求内容进行加密,服务器用私钥对请求内容进行解密。以及服务器用私钥对响应内容进行加密,而客户端用公钥对响应内容进行解密。如下图所示:
这种方案有一个缺点:公钥是公开的,黑客也可获取,所以Response Body如被黑客截获,也可使用公钥进行解密,获取响应内容。
3.3.对称加密和非对称加密相结合的HTTPS
为了发挥堆成加密和非对称加密HTTPS的优势,我们提出以下方案:
第三步中,客户端告知服务器自己的信息之后,均使用对称加密,并发送对称加密算法和对称加密密钥。
当然,这种方案也还有两个问题:
(1)客户端如何获取公钥?
(2)如何确认服务器是真实的,而不是黑客?
如果没有解决以上两个问题,黑客亦可以在通信过程中充当客户端和服务器的中介,参与到整个通信过程。
3.4.改良的混合加密方案
为解决混合加密HTTPS的两个问题,我们提出以下方案:
第二步中,服务器发送SSL证书给客户端。
SSL证书中包含以下内容:
(1)证书发布机构CA
(2)证书有效期
(3)公钥
(4)证书所有者
(5)签名
客户端在收到服务端证书时,会对证书的真伪进行校验。下面以浏览器为例描述校验的过程。
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了
至此,通过SSL证书的形式解决了HTTPS过程中遇到的问题。
3.5.HTTPS的优点
HTTPS并非绝对的安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍然是现行架构下最安全的解决方案,主要有以下几个优点:
(1)使用HTTPS协议可以认证用户和服务器,确保数据发送到正确的客户机和服务器。
(2)HTTPS协议由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变、确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
(4)google曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
3.6.HTTPS的缺点
虽说HTTPS有很大优势,但相对来说,也还存在以下不足:
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长50%,增加10%到20%的耗电。
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响。
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要,一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPV4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
4.HTTPS对比HTTP
主要从以下方面对比两种协议。
4.1.安全性
这是两者间最大的区别。相比HTTP的明文传输,HTTPS传输更加安全,主要表现为以下三点:
(1)所有信息加密传输,黑客无法窃听。
(2)具有校验机制,一旦被篡改,通信双方会立刻发现。
(3)配备身份证书,防止身份被冒充。