一、HTTP的缺点
1. 通信使用明文(不加密),内容有可能会被窃听
因为按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。即使已经对数据进行了加密,也是会被窥视到通信内容,这点和为加密的通信时一样的。只是加密后的数据,被窥视了,也无法破解报文的含义。(加密处理后的报文信息还是会被看到)
通信的加密
HTTP协议中没有加密机制,但可以通过和SSL (Secure Socket Layer,安全套接层) 或TLS (Transport Layer Security,安全传输层协议) 的组合使用,加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS (HTTP Secure,超文本传输安全协议)或HTTP over SSL。
内容的加密
由于HTTP协议没有加密机制,那么就对HTTP协议传输的内容本身加密,即由客户端对HTTP报文进行加密处理后再发送请求。
为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。但是该方式与SSL和TLS将整个通信线路机密处理,所以内容仍有被篡改的风险。
2. 不验证通信双方的身份,因此有可能遭遇伪装
任何有都可发起请求
HTTP协议不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患。
- 无法确定返回请求响应的服务器是否是已伪装的Web服务器。
- 无法确定接受响应的那个客户端是否是已伪装的客户端。
- 无法确定通信的对方是否具备访问权限。
- 即使无意义的请求也会处理,无法阻止海量请求下的Dos攻击。
查明对手的证书
HTTP无法确认对方身份,而SSL可以。SSL不仅具有加密功能,还有使用了一种被称为证书的手段,可用于确定对方。
证书是由值得信赖的第三方机构颁发,用以证明服务器和客户端的实际存在。伪造证书从技术角度来说是异常困难的事,所以只要能确认通信方持有证书,即可判断通信方的真实意图。
3. 无法证明报文的完整性,所以有可能已遭篡改
收到的内容可能有误
由于HTTP协议无法证明通信的报文完整性,所以请求或响应的内容遭到篡改,也没有办法获悉。
比如我在某个网站下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致。像这样,请求或响应在传输中,遭攻击者拦截并篡改内容的攻击称为中间人攻击。
如何防止篡改
HTTP协议为了确定报文完整性,常用的方法有MD5和SHA-1等散列值检验的方法。
提供文件下载的网站也会提供响应的以PGP创建的数字签名及MD5算法生成的散列值。但不论哪一种方法,都需要操作客户端的本人进行人工检验。而且本身查看的PGP和MD5也有可能被改写,用户是没办法意识到的。
所以有了有效防止这些弊端,有必要使用HTTPS。
二、HTTP+加密+认证+完整性保护=HTTPS
1. HTTPS是披着SSL外壳的HTTP
HTTPS不是应用层的新协议,只是HTTP接口部分用SSL和TLS协议代替而已。SSL独立与HTTP,除了HTTP协议,其他应用层的协议如:SMTP和Telnet等协议也可以跟SSL配合使用。