哪些原因导致了HTTP协议确保不了通信安全?

前言

最近在看的《图解HTTP》对于HTTP缺点的描绘十分细致,在此分享下。在目前的个人信息采集,交易支付等重要领域,HTTPS已经完全替代了HTTP协议通信,说白了HTTPS就是身披SSL协议和TLS协议外壳的HTTP

SSL和TLS

这里先为不懂的童鞋讲解一下SSL和TSL协议,SSL(Secure Sockets Layer 安全套接字协议),及其继任者TLS(Transport Layer Security,安全传输层协议)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。说白了就是出于安全考虑为互联网通信多设计了一个防护罩。
在这里插入图片描述
那相比于拥有SSL和TSL协议这个外壳的HTTPS协议,HTTP协议它有哪些缺点呢?

HTTP协议的缺点

一、无法证明报文的完整性,报文有可能被纂改

所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。

接收到的信息可能有误
由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到纂改,也没有办法获悉。换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。
在这里插入图片描述
比如,从某个网站上下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致。文件内容在传输途中可能已经被纂改为其他的内容。即使内容真的已经被改变,作为接收方的客户端也是察觉不到的。像这样,请求或响应在传输途中,遭攻击者拦截并纂改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)。

解决方法
虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠。一般常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。提供文件下载服务的Web网站也会提供相应的以PGP(完美隐私)创建的数字签名及MD5算法生成的散列值。

可惜的是,用这些方法依然无法百分百保证确认结果正确。因为PG5和MD5本身被改写的话,用户是没有办法意识到的,所以必须使用HTTPS。

二、通信使用明文,内容可能会被窃听

所谓明文就是没有经过加密的文字。由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。所以HTTP报文使用明文的方式进行通信。

TCP/IP网络是会被窃听的
可能有人会疑惑不加密为什么会被窃取,了解TCP/IP网络的肯定已经知道了,因为按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。

所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在 和客户端通信时,在此通信线路上的某些网络设备、光缆、计算机等都不可能是个人的私有物,所以不排除某个环节中会遭到恶意窥视行为。
在这里插入图片描述
所以即使已经经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是相同的。只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文信息本身还是会被看到的。况且,监听相同段上的通信并非难事。只需要收集在互联网上流动的数据包(帧)就行了。对于收集来的数据包的解析工作,可交给那些抓包或嗅探器工具,比如网络工程师经常使用的Wireshark就是很好的一款软件。
在这里插入图片描述
解决方法
有矛自然有盾,为了防止数据被窃听,HTTP协议除了可以和SSL、TLS组合使用形成HTTPS协议以外,还可以将参与通信的内容本身进行加密。

在这种情况下,客户端需要对HTTP报文进行加密处理后再发送请求。当然,为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制,主要应用在Web服务中。有一点需要注意,由于该方法不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被纂改的风险。

三、不验证通信方的身份,因此有可能遭遇伪装

HTTP协议中的请求和响应不会对通信放进行确认。也就是说存在“服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。

任何人都可发送请求
这个缺点的特点是在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发送请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的情况下)
在这里插入图片描述
这样的协议尽管方便,却会带来很多的隐患:
1、无法确定请求发送至目标的Web服务器是否是真实意图返回响应的那台服务器。有可能是已伪装的Web服务器。
2、无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
3、无法确定正在通信的对方是否具备访问全限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的全限。
4、无法判定请求是来自何方、出自谁手。
5、即使是无意义的请求也会照单全收。无法阻止海量请求下的DOS攻击(Denial of Service,拒绝服务攻击)。

解决方法
使用证书,现在这社会,无证可谓
在这里插入图片描述
而HTTP协议中的证书由第三方机构发布,用以证明服务器和客户端是实际存在的。而伪造证书是一件十分困难的事情。这也就使得数字认证等证书流行了起来,只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。

以上这些问题不仅在HTTP上出现,其他未加密的协议中也会存在这类问题。除此之外,HTTP本身还有很多缺点。而且,还有像某些特定的Web服务器和特定的Web浏览器在实际应用中存在的不足(也可以说成是脆弱性或安全漏洞)。

猜你喜欢

转载自blog.csdn.net/weixin_45797022/article/details/106406256