上一篇文章详细讲解了 HTTP 的相关原理,我们已经了解到了 HTTP 具有非常优秀和方便的一面,然而,HTTP 并非一个安全的协议。大家平常浏览网页的时候应该也能注意到,使用 HTTP 协议的网站,浏览器都会认定这是一个不安全的网站,提醒用户注意防范(即便这是我们学校的选课系统)。
当然,这个不安全的含义指的是你在该网页输入的信息可能会被外界攻击者以非正常手段窃取,而不是说会被这个网页的开发者获取,毕竟浏览器咋能判断这个网页开发者是否存有异心,这个需要用户自行判断(手动滑稽 )
那么为了克服 HTTP 的缺点,确保 Web 的安全,HTTPS 就应用而生了。可以看见,使用 HTTPS 协议的网页,地址栏前面都会有把小锁,表示这是一个加密安全的网站,你的信息发送到此站点时是保密的。而且 Google、Baidu 等搜索引擎巨头对于 HTTPS 网站都会给到更好的搜索排名。
本文会先解释 HTTP 为什么是不安全的,然后讲解 HTTPS 为了保证 Web 的安全提供了哪些手段,最后再揭晓谜底,为什么更安全的 HTTPS 协议在互联网上没有被全面采用。
1. 不安全的 HTTP通过上面那张图我们已经知道,对于使用 HTTP 的网站,浏览器就会提醒我们请勿在此网站上输入任何敏感信息,否则可能会被攻击者窃取。没错,这就是 HTTP 协议不安全的表现,而且,仅仅是其中之一,HTTP 的不安全性体现在很多方面,例举如下:
- 通信使用明文(不加密),内容可能被窃听
- 不验证通信对方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能被篡改
当然,这些问题不仅在 HTTP 上出现,其他未加密的协议中也存在类似问题
下面我们详细分析下上述问题出现的原因。
① 内容被窃听所谓互联网,是由能连接到全世界的网络组成的,万物互联,无论世界哪个角落的服务器在和客户端进行通信时,在此通信线路上的网络设备、光缆、计算机都可能会遭到恶意窥视行为。也就是说,互联网上的任何角落都存在通信内容被窃听的风险。
而由于 HTTP 本身不具备加密的功能,所以也无法做到对 HTTP 请求和响应报文进行加密。
但是!即使是加密过的通信内容,也会被窥视到,这点和未加密的通信是相同的。只能说经过加密后的内容,即便被攻击者窥视到,他也可能无法破解其中的含义罢了,但是加密处理后的报文信息本身还是会被看到的,这点大家不要混淆了。加密后的内容尚且如此,更别说未加密的了。
② 身份被伪装HTTP 的请求和响应不会对通信方进行确认,也就是说任何人都可以发起请求,而服务器对请求者来者不拒,只要接收到请求,就会返回一个响应。
显然,正是由于 HTTP 的这种简单性,导致了如下隐患:
1)客户端发送的 HTTP 请求报文可能到达的并非真正的目的服务器,可能是已伪装的服务器