为什么需要HTTPS?HTTP具有哪些缺点
HTTP主要具有以下3点不足:
一、通信使用明文(不加密)可能会被窃听
由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即HTTP使用明文(未加密的报文)的方式发送。
两种方式加密处理防止被窃听:
1.通信的加密
HTTP协议中没有加密机制。但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。
2.内容的加密
由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。在这种情况下,客户端需要对HTTP报文进行加密处理后再发送请求。其中报文首部一般未被加密处理,报文主体的内容会被加密处理(通信本身时不加密的)。
为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。主要应用在Web服务中。由于该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。
二、不验证通信方的身份可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。
1.任何人都可以发起请求
在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。由于HTTP协议的实现本身非常简单,不管是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患:
·无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器。
·无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
·无法确定正在通信的双方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
·无法判定请求是来自何方、出自谁手。
·即使是无意义的请求也会照单全收。无法阻止海量请求下的DoS攻击(Denial of Service,拒绝服务攻击)。
2.查明对手的证书
虽然使用HTTP协议无法确定通信方,但使用SSL则可以。SSL不仅提供加密处理,还是用了一种称为证书的手段,可用于确定通信方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。
通过使用证书,以证明通信方就是意料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。
三、无法证明报文完整性——可能已遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。
1.接收到的内容可能有误
由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后知道对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。
比如,从某个Web网站上下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致的,文件内容在传输途中可能已经被篡改为其他的内容。即使内容真的已改变,作为接收方的客户端是察觉不到的。像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)。攻击者会随意篡改请求和响应,而让客户端与服务器之间的通信看上去仍旧是正常的。
2.如何防止篡改
虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠。其中常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。但是用这些方法也无法百分百保证确认结果正确。因为PGP和MD5本身被改写的话,用户是没有办法意识到的。
为了有效防止这些弊端,有必要使用HTTPS。SSL提供认证和加密处理及摘要功能。仅靠HTTP确保完整性是非常困难的,因此通过和其他协议组合使用来实现这个目标。
HTTP+加密+认证+完整性保护=HTTPS
HTTP+通信加密+证书+完整性保护即为HTTPS(HTTP Secure)。
我们经常会在Web的登录页面和购物结算界面等使用HTTPS通信。使用HTTPS通信时,不再用http://,而是改用https://。另外,当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址内会出现一个带锁的标记。对HTTPS的显示方式会因浏览器的不同而有所改变。
HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通常,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
在采用SSL后,HTTP就拥有了了HTTPS的加密、证书和完整性保护这些功能。SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
相互交换密钥的公开密钥加密技术
SSL采用一种叫做公开密钥加密(Public-key cryptography)的加密处理方式。近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这种方式得以保持加密方法的安全性。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了、如果密钥被攻击者获得,那加密也就失去了意义。