事物皆有两面,HTTP也有其不足之处,如下所示举例:
(1)通信使用明文,不加密,内容可能会被窃听;
(2)不验证通信方的身份,因此有可能遭遇伪装;
(3)无法证明报文的完整性,所以有可能已遭篡改。
1,通信使用明文可能被窃听
HTTP协议本身并不具备加密的功能,因此按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是一样的。只是说如果通信加密,有可能让人无法破解报文信息的含义,但是加密处理后的报文信息本身还是会被看到的。
使用抓包工具可以获取HTTP协议的请求和响应的内容,并对其进行解析。例如使用GET方法发送请求、响应返回了200 OK,查看HTTP响应报文的全部内容等信息。
如何防治窃听保护信息,最普及的就是加密技术。
通信的加密
HTTP协议中没有加密机制,但是可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。
用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称之为HTTPS(HTTP Secure,超文本传输安全协议)或HTTPover SSL。
内容的加密
这是一种将参与通信的内容本身加密的方式。即把HTTP报文里所含的内容进行加密处理,在这种情况下,客户端需要对HTTP报文进行加密处理后再发送请求。为了做到有效的内容加密,客户端和服务器应同时具备加密和解密机制。这种方法不同于通信加密,内容仍有可能被篡改。
2,不验明通信方身份就可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认,即存在着以下几种问题:
(1)无法确定请求发送至目标的Web服务器是否按真实意图返回响应的那台服务器。有可能是伪装的服务器;
(2)无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端;
(3)无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要信息,只想发给特定用户通信的权限;
(4)无法判定请求是来自何方、出自谁手;
(5)即使是无意义的请求也会照单全收,无法阻止海量请求下的DOS攻击(拒绝服务攻击)。
虽然HTTP协议无法确定通信方,但是如果用SSL则可以。SSL不仅提供加密处理,还可以使用一种称为证书的手段,可以用于确定对方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。只要确定通信方持有的证书,则可判断通信方的真实意图。另外,客户端持有证书即可完成个人身份的确认,也可用于Web网站的认证环节。
3,无法证明报文完整性,则有可能被篡改
完整性是指信息的准确度,如果无法证明完整性,则无法判断信息是否准确。因此有可能出现中间人攻击篡改后,服务器和客户端仍不知情。
虽然有使用HTTP协议确定报文完整性的方法,但是这并不便捷可靠。为了有效防止其中弊端,有必要使用HTTPS。SSL提供认证和加密处理及摘要功能。
下面我们开始介绍HTTPS的相关内容。HTTP加上加密处理、认证和完整性保护之后,我们定义为HTTPS(HTTP Secure)。通常在Web登录页面和购物结算界面等使用HTTPS通信。浏览器的地址栏内为https:// 和带锁的标志。另外,对HTTPS的显示方式会因浏览器的不同而有所改变。
HTTPS并不是应用层的一种新协议,而是在HTTP通信接口部分用SSL和TLS协议代替。因此,HTTP不再与TCP通信,而是先和SSL通信,再由SSL和TCP通信。因此,HTTPS就是身披着SSL协议这层外壳的HTTP。这里的SSL协议是广泛使用的应用的网络安全技术。
关于加密技术,SSL采用一种叫做公开密钥加密的加密处理方式。加密和解密都会用到密钥。因此,如果密钥被攻击者获取,那么加密就无意义了。加密和解密同用一个密钥的方法称为共享密钥加密,也称为对称密钥加密。
以共享密钥方式加密时必须将密钥也发给对方,因此这里就存在密钥被窃听的风险。使用公开密钥加密方式能够很好解决这个风险。公开密钥加密使用一对非对称的密钥,一把叫私有密钥(private key),一把叫公开密钥(public key)。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布。
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。当密钥能够实现安全交换,则考虑仅使用公开密钥加密来通信。因为,要注意的是,公开密钥加密处理比共享密钥加密方式更为复杂,若在通信时使用公开密钥加密方式,效率很低。