HTTP协议的缺点
-
通信使用明文(不加密)内容可能会被窃听
通信内容一般要经过多次转发才能到达接收端。在这个通信过程中,在各个阶段通信内容都有可能被窥探。即使通信内容进行过加密,但是加密后的报文还是会被窃听。而且,如果内容要到达接收端,密钥也会需要传输到接收方,在传递过程中,密钥还是有可能被获取。 -
不验证通信方身份,可能遭遇伪装
HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。服务器只要接到请求也都会响应。所以请求方和服务器都可以伪装。
无法确定正在通信的双方是否具备访问权限
即使是无意义的请求也会照单全收,无法阻止海量请求下的DoS攻击(Denial of Service拒绝服务攻击) -
无法验证报文的完整性,可能遭遇篡改
所谓报文的完整性,指的是信息的准确度。因为信息在传递的途中可能被篡改,而服务器没法知道是否被修改。
由于HTTP协议存在以上各种缺点,所以为了有效防止这些弊端,就有必要使用HTTPS了
所谓HTTPS
HTTPS=HTTP+加密+认证+完整性保护
看吧,上面这个公式,正好可以对应解决HTTP的弊端
-----下面依次来解释以上公式-----
- HTTP
HTTPS并非新的应用层协议,而是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替。用HTTP的时候,HTTP直接和TCP通信,用SSL的时候,HTTP就会先和SSL通信,然后SSL再和TCP通信。简而言之,HTTPS就是套了SSL协议外壳的HTTP
-
加密
HTTP加密传输一般使用 <u>共享密钥加密</u>,这是一种<u>对称加密方法</u>也就是说,发送方和接收方使用同一套密钥。这样存在的问题是,密钥在传输过程中可能被窃取。
HTTPS采用的是<u>公开密钥加密</u>的处理方式。这是一种 <u>不对称的加密方式</u>,就是说,发送方用对方的公开密钥加密,当信息传递到对方的时候,对方用自己的私有密钥解密,这样就不涉及传输密钥的安全问题。公开密钥可以随意传输,私有密钥只有自己知道。棒棒的~ -
认证
HTTP协议无法确定通信方,但是SSL可以。它拥有一种叫做证书的手段,可用于确定方。另外伪造证书想当困难,所以只要能够确定通信方持有证书,就可以判断通信方的真正意图。
证书由值得信赖的第三方机构颁发,用以证明服务器端和客户端是真实存在的。 -
完整性保护
应用层在发送数据时,会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
HTTPS也有一些问题
当HTTP使用SSL的时候,处理速度会变慢,一般HTTPS 比HTTP慢2到100倍。
一是因为多了HTTP和SSL及TCP的通信
二是因为HTTPS要处理客户端和服务器之间的加密解密,完整性,证书认证等验证。这也将消耗CPU和内存等硬件资源
<u>由此看来在一些情况下不用HTTPS的原因也是显而易见了:</u>
因为HTTPS的处理速度会变慢,因为对硬件的消耗,对访问量很大的web网站而言,其承担的负载不容小觑。除此之外,节约购买数字证书的成本也是原因之一。
所以,一般非敏感性信息还是会用http通信,敏感性的信息才会用https通信。
针对SSL速度慢的情况,没有根本的解决方案,一般会使用SSL加速器这种(专用服务器)硬件来改善问题。
本文整理自《图解HTTP》和网络,之后将持续进行完善
图解HTTP系列:
图解HTTP--HTTP状态码
图解HTTP--TCP/IP
图解HTTP--与HTTP协作的web服务器
网友评论