http和https,这两个词对于外行来说,大多是不知道这俩区别的,即使在程序开发的圈内,依然有很多小伙伴不清楚这俩有什么不一样。
https其实就是http over tls的简称,tls相当于建立的一条加密的隧道,http则是隧道里面的流动的内容。 至于tls怎么实现加密的,这里就不赘述了,你只需要知道,tls是一条加密的隧道
10年前,几乎大多数的网站,都是使用的http协议,而http是明文协议。这也就意味着,发送一个http请求,在任何能获取到流量的地方,都可以获取到发送的内容,当然也可以获取到网站的返回内容。从信息安全的角度来说,这种流量有被窥探,以及篡改的风险。
为了解决流量的安全问题,人们发明了https协议,让不加密的http流量跑在加密的tls通道里。这样,如果要窥探内容,那么就需要对tls进行解密。当然,目前来说,http使用的证书机制还是相对比较安全的。
我们返回来再说流量安全,当你再浏览器打上baidu.com,回车时,首先,baidu.com需要发给dns服务器解析,当本地没有缓存该域名,或者缓存过期,那么这个dns请求就会发送到dns服务器上,而dns请求是一个明文请求,此时就可能产生了第一次的信息泄露
链路中间任何一个路由,交换设备都可以知道你要访问baidu
dns服务器收到这个请求后,会返回给你该域名指向的ip地址,以及该ip的有效时间(ttl)。此时浏览器就会和该ip地址建立http连接,发送请求的数据,此时交换的任何数据,再http协议下,对沿途的设备都是透明的,这样就又会产生第二次信息泄露风险
链路中间任何一个路由,交换设备都可以知道你和百度交换的内容
对于第一个问题,似乎我们没有很好的解决方案,只能寄希望于Doh(dns over tls)的普及,而第二个问题,则正好可以通过https来解决数据传输的加密。
仅仅这样就结束了?当然不是,其实我们平时上网,比如百度,我们甚至只会打 baidu.com就提交了,浏览器会默认添加上http协议,当百度发现这个http请求不安全的时候,他会给你返回一个301永久转跳,或者302临时转跳到https://baidu.com ,对于我们自己的网站,则一般在头信息中加入hsts信息,只允许https访问即可,这样任何http都会被重定向到https。当然,这也是有代价的,任何一次重定向,都会进行一次网络io,而第一次访问该网站,这样的io看起来似乎是不可避免的。
于是浏览器组织发明了HSTS Preload list,其实就是一个域名名单,所有在这个名单中的域名,无论用户怎么输入,都会在浏览器发送阶段,直接变成https访问,也就少了服务器端的重定向。关于HSTS Preload list,更多的信息可以自行百度。
笔者的部落格在去年申请后,大概两个月后的浏览器版本中,加入了默认的HSTS Preload list。
本文由 转啊转 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2022/10/22 17:47