网上说TLS的文章不少,要学习TLS技术有不少不错的选择。本文并非一个权威的教程,只是我我的学习TLS后基于本身理解的一个总结而已。若是有读者经过阅读此文后加深了对TLS的理解,不胜荣幸。web
要聊TLS,还得从HTTP提及,HTTP能够说是做为目前最流行的一个网络协议,能够说是网络的基石之一。通常来讲能够理解为从浏览器看到的全部东西,都是构建于HTTP之上的。算法
早期HTTP协议被设计成在一个可信网络环境中运行,其设计理念以简单为主——经过一个通用格式的明文请求就可以获取到各类文档、样式、脚本、富媒体内容等。浏览器
HTTP协议的简洁安全
因为其简洁性,各类互联网应用都得以在其之上进行充分的扩展,从最先的一个HTML文档就是一个网页,到现在打开一个淘宝首页就有百八十个HTTP请求。各类类型的HTTP请求相互配合,组成了现在咱们所看到的缤纷多彩的互联网世界。服务器
然而,现在的互联网环境纷繁复杂,HTTP的简单也面临两个大的问题网络
本文主要着眼于安全性方面,第二点后续有机会再议。ssh
致使安全问题的一个重要缘由是经过HTTP的请求及返回都是明文的,下面经过两个例子说明。工具
其一是网络运营商劫持问题。主要是指咱们的网络运营商(电信、联通、移动等)经过在咱们看的网页中添加广告,来谋取广告费的问题。下面来看看他们是怎么作的。性能
咱们所谓的『上网』大致分为两步,首先给咱们要上的网的服务器发送一个请求,而后接收到服务器返回的内容,浏览器将这些内容展现出来就是咱们看到的网页了。咱们的请求并非直接发送给目标网站的服务器的,中间通过了层层的转发。学习
服务商劫持
如上图所示,整个互联网实际上是一个拓扑结构,咱们的请求往返于服务器之间,实际上是通过了不少个节点的(这里只是简单YY了一个三层的结构,实际网络拓扑要复杂不少)。图中橙色的节点就是咱们网络运营商的节点了。按说运营商收了咱们的网费,好好的作好传送数据的事情就行了。然而一些黑心运营商(干这事的通常为三四线城市的小运营商)在收了网费的同时还很差好干活,在服务器的返回内容中插入他们本身的广告,以此来多谋得一份广告收入。
这里随便网上找了两个被插入广告的例子。
劫持1
劫持2
从第二个图能够看到,运营商经过解析HTTP请求返回的HTML内容,在其中插入一个iframe区块,完成广告的展示。这个事情自己没难度(分析网络请求的具体内容,有个专业术语叫『深度包检测』),作不作就是运营商的节操问题了。
因为这种现象仍是比较影响体验的,所以一些网站踏上了全站HTTPS改造之路,不惜巨大改形成本和性能压力,旨在避免运营商的流氓行径,这里先按下不表。
上述这种问题咱们总结下,属于『可信(相对)』人员占着『有利位置』,经过篡改请求来『某点小利』。这里之因此说这些黑心运营商是『可信』,是由于他们虽然有能力作任何事,但毕竟本职是负责传输,除了打打小广告以外,通常仍是可以保证传输内容的安全的。所以当你碰到这种状况时没必要过于紧张,打个电话投诉下也就完事了。
为何强调『可信』这个概念,是相对于下面这个case来讲的。『可信』的运营商在『有利位置』,这是没办法改变的。但要是咱们不当心把『不可信』的不法分子也放到『有利位置』,那恐怕就不是被打打广告这个简单了。所谓的『不可信』就是下图这种状况。
公共wifi
以前的图中红色节点是咱们家里本身的wifi,那是能够保证安全的。但若是你是出门在外,使用的是餐厅、咖啡馆、酒店、机场的wifi,那还能保证安全吗?固然不能!虽然通常公共场所提供wifi也就是个便民服务,没啥心机。但假设你不幸链接到的是不法分子故意开放的wifi,那危害就很大了。
公共wifi问题
这些不法分子能够窥探你全部的请求以及服务器的返回,那简直就是想干啥就干啥了。如下为YY场景。
上述两次例子中,运营商和公共wifi提供者要么是窃听了用户的请求,要么是往服务器的返回中加点料。无论具体方法是啥,问题的本质在于<u>HTTP请求和返回都是明文的</u>。致使一路上这么多节点,每一个节点均可以拿点它须要的信息,或者往里再加点料~
除此以外,HTTP的另外一个问题是<u>无法校验返回给你内容的服务器是不是目标服务器</u>。这说的有些拗口,也无法找到真实的应用层实例,那咱们来看下相似的一个例子吧。
TCP RST
如图所示是防火墙设备阻止用户访问特定网站的一种技术,有些公司会禁止员工访问游戏、股票等网络服务,就会用到这种技术(国家有时候也能够看作一个公司😂)。HTTP基于TCP/IP协议之上,借助DNS协议的配合,帮助用户只须要记住一个好记的单词(域名或叫网址),就能访问到特定的网络服务。这个路由的原理不在本文范围以内,但TCP/IP + DNS + HTTP这套机制可以work的缘由一样基于一个假设——网络环境是可信的,网络中的每一个节点都会按照协议要求有序运做。上图中的橙色节点在用户访问百度时正常工做,但在访问youtube时则没有把请求往上传递,而是直接回复用户不能响应请求。(TCP RST为断开TCP链接)还有一种状况下请求仍是往上传递到目标服务器了,但中间节点却提早回复了一个TCP RST。用户端浏览器收到一个TCP RST后并不知道真相,觉得是要访问的服务拒绝了咱们的请求,所以就关闭了请求。而实际上服务器是无辜的,有节点假装了它。
上述例子仍是咱们『可信』的运营商或者防火墙提供商进行网络管理的一种手段,其结果也就是用户上不了某些网站而已,影响不是太大。和明文问题同样,要是碰到的是一个『不可信』的节点,那问题就大得多。
钓鱼网站
钓鱼网站的问题你们如今都很注意了。不法分子将假网站作的和真网站如出一辙,经过聊天工具或短信骗用户点击访问,企图利用假网站骗取用户的用户名密码。这种作法可以被大多数人注意的缘由是其网址和真网站不一样,但若是把钓鱼网站这个方式往上面的例子套,那就彻底能以假乱真了。这种问题对于HTTP请求来讲几乎没有分辨的办法。
钓鱼网站流程
上述两个例子都是用户没有访问到真正的目标服务器,而是由某个恶意节点<u>假装成目标服务器</u>给用户返回了内容。这种方式在通常的上网过程当中是几乎没法分辨的,只有技术人员刻意进行分析时,才能发现这种假装HTTP服务器的状况。
至此本文一共聊了四个例子,说明了HTTP存在的两个安全问题
为了解决这两个问题,咱们引入TLS(传输层安全)协议。运行在TLS协议之上的HTTP协议称做HTTPS,简而言之你们平常上网时尽可能使用HTTPS网址来代替HTTP网址,就能够大大提到安全性了~
上篇结束,下篇会介绍下TLS的大体原理,解释其为啥可以保证安全。
做者:jimsshom 连接:https://www.jianshu.com/p/398c9ab538b7 來源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。