HTTP的缺点以及HTTPS的出现

之前做了一个网站的项目,之前的网站用的都是HTTP协议的,这是一个超文本传输协议,这篇文章不说HTTP协议内部是怎么实现的,我只在我之前的基础上,说一些HTTP的缺点以便引进HTTPS协议(超文本传输安全协议),简单理解,它就是安全的HTTP协议。

HTTP是很轻巧方便的协议。但与此同时,HTTP协议也有很多的缺点:

  • HTTP协议通信使用明文(未加密的报文),不对传输内容进行加密,如果使用fiddler等抓包工具可以很轻松地截取到HTTP的请求与响应报文(事实上我在做网站的时候经常用fiddler抓包来查看报文内容)
  • HTTP不会验证通信双方的身份,因此有可能出现别的人伪装成对方来和你通信,即通信双方很可能是伪装的,比如我访问百度首页,我并不知道这个响应就是百度返回给我的,也可能是别的人伪装成百度来和我通信
  • HTTP无法证明报文的完整性,有可能报文被截取以后被篡改了再发给我,这样我得到的就是被篡改了的报文。

以上三个缺点,可以简要地归结为如下三点:易被窃听,无身份验证,易被篡改。

事实上,不仅仅是HTTP协议,几乎所有的不加密的协议都会出现此类问题。

 

TCP/IP是可以被窃听的网络

按照TCP/IP协议的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。可以这样理解,在互联网通信时,在通信线路上的所有网络设备等都不是个人私有物,所以很容易被他人所窃听。

所谓的数据加密,其实只是对我们的报文内容进行一个加密,但是我们加密以后的内容还是可以被窃听,但是窃听者不知道怎么对这些加密了的报文进行解密,这在一定程度上起到了数据安全的作用。

加密处理防止数据被窃听

通信加密

  • HTTP没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容
  • 在用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了

内容加密

  • 对HTTP传输内容本身进行加密,这就需要发送方对HTTP报文加密以后再发送请求。
  • 这就要求通信双方使用共同的一套加密和解密机制
  • 但是注意,由于这种加密方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险(比如,第三方截取到了报文,并对加密信息做了一些改变,可能是乱改,因为它也不知道加密和解密的机制,但是这样也破坏了接收方收到的信息,按原来的解密方式解密以后,可能就是已经不同于应有内容的数据)

 

不验证通信双方的身份就容易发生伪装

HTTP中的请求和响应不会对通信双方的身份进行确认,可能客户端浏览器实际访问的服务器就不是URL真正指定的服务器,服务器返回给的客户端浏览器的响应不是真正发起请求的客户端浏览器

HTTP服务器可以接收任何请求,只要谁发来了一个请求就会返回一个响应。

由于没有身份验证的问题,并且对请求来者不拒,于是就会出现下面几种情况

  • 接收到请求的服务器可能是伪装的服务器
  • 接收到响应的客户端可能是伪装的客户端
  • 无法确定通信双方是否存在具备访问权限(因为某些内容,只想发送给特定的用户,普通用户可能没有权限访问)
  • 即使是无意义的请求也会来者不拒,无法阻止海量请求下的DOS攻击

查明对方证书来验证通信双方身份

虽然HTTP本身没有验证身份的机制,但是SSL有一种证书手段,可以用来进行身份验证。

证书是由双方都认可的第三方机构颁发的,用来证明服务器和客户端都是实际存在的(可以理解为日常生活中的担保)。而对于证书,从技术上来说,伪造证书是非常困难的事。所以只要能够确认通信方持有的证书,即可判断通信方的真实意图。

客户端在建立连接的时候,会先验证一下服务器的证书,用来确认访问的即是这个服务器。而服务器持有第三方发给的证书,于是将此证书返回给客户端,于是客户端知道,我要访问的就是这个服务器,于是身份验证就好了。

对于支付宝之类的涉及个人财产即隐私的服务器,尤其需要身份验证,否则用户数据一旦泄露后果不堪设想。

同时,客户端也持有证书,这样即可做到个人信息的确认,服务器就知道我到底访问的是不是这个人了。

接收到的内容可能会被篡改

HTTP无法保证内容的完整性,即无法保证客户端接收到的响应和服务器发出的响应的内容是一样的,在传输过程中可能被篡改。

比如要从网站上下载内容,HTTP无法确定客户端下载到的内容就是服务器上存放的那个文件,即使内容被改变,客户端也是察觉不到的。这就是中间人攻击,由中间人截取报文并篡改。

如何防止篡改

之前在说到加密的时候我们说到,可以通过一些加密手段来对内容进行加密,其中常用的方法有MD5和SHA1等散列值校验的方法,以及用来确认文件的数字签名方法。

提供文件下载服务的网站也会提供相应的数字签名,以及MD5算法生成的散列值。但是不论哪种方法,都需要操作客户端的用户本人亲自检查验证下载的文件是否就是服务器上的文件,浏览器无法帮助用户检查。

但即使用了上面的方法,也无法保证数据不被篡改,上面说过了,因为可能MD5本身被改了的话,还是会发生篡改的问题。

 

为了有效防止上面说到的 易被窃听,无身份验证,易被篡改这三个问题,就引入了HTTPS。

HTTPS就是HTTP+SSL协议,HTTP协议本身无法解决这些问题,就得依靠别的协议。而SSL协议做的事情,其实就是数据加密,身份认证,保证数据完整性不被篡改。因此之前所说的HTTP的缺点,HTTPS就可以很好的解决。

下一篇文章我们再来探讨HTTPS协议

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值