最近在看一些关于https的东西,其他人写的博文啊什么,有写的比较通俗的,有写的比较晦涩的,引发了两点思考:
1、其实任何一种技术的产生都是服务于现实需求的,也就是为解决实际问题或者对已有版本的存在的问题进行改进。https也不列外,那如果以解决问题的思路去理解它,即为什么要有它?那我想是相对比看一堆名词和理论要容易理解的多。这是不是就是传说中的上帝视角呢?
2、 另外我在想其实很多事务都有共通性,即虽然看似不是一个领域的事,但是解决问题的思路和方法,细细想来,其实很相似,所以我们在理解一种技术的时候,如果能以现实生活的例子做类比,那对我们对事物的理解又会更上一层楼。所以这篇文章不会没有各种图,没有各种协议的实现细节,没有各种指标,仅仅只对https这个东西的一点初略理解。
废话不多说(其实已经说了很多),下面来验证我的思考,就以我https为例吧:
一、首先什么是HTTP?
按照我思考的第一点,说到HTTP,他首先就是千万种技术中的一种,那我们首先就要思考这种技术为什么会产生。我们都知道当今互联网使用最广泛的服务应当就是web服务,就是日常我们用浏览器打开各种网页这种,普通用户其实只是做了一个简单的打开操作,那实际上这个操作背后有许多技术在支撑,HTTP协议就是其中一个。
首先http就是一种协议,协议是什么呢,就是一种流程,一种规范,比如我们实际生活中买东西也罢,吃东西也罢,都是在按着一定的流程和规矩在办事的,那放到网络上也一样,我们在浏览器中打开一个网页,实际上就是想看到我们想看的东西,那这个东西是放在你打开的这个网页背后对应的公司的服务器上的,由于不是面对面的交流,这种交流的方式是通过网络来实现的,就像我们跟远方的朋友交流用电话实现一样,那么问题来了,这么多用户和服务器交互,如果没有一个规矩,那根本不能实现有序良好的交流,想想如果没有交通规则,马路上的车该如何通行吧。所以http这种协议产生的目的就是为规范浏览服务。比如浏览器跟网站(服务器)如何请求数据,如何返回数据,如何控制交互过程中的一些细节等等。
二、为什么会有HTTPS?
我们知道了http是什么,那其实任何一种事物或者技术的产生都是基于当时的环境,即使能做长远考虑,也未必能完全适应未来的发展,毕竟生活环境的变迁及技术的演进有时的确难以预料,所以才有了技术的不断更新。http跟其他任何技术一样,刚出现时只考虑解决了功能需求,对安全性却没有过多考虑:http协议下的数据传输都是明文方式进行的,就像现实生活中的白话交流一样,旁人如果愿意听,其实是很容易听到的,网络世界里的交流也是一样,所以可以说http解决了web浏览这种需求,但是却很不安全,这就是https产生的原因:需要对http进行安全加固。
三、什么是HTTPS?
https比http从名字上简单来看就是多了一个S,这个多出的S代表什么呢?其实就是指SSL/TLS,说的直白点就是在http这种协议上又套了一个壳子,为什么要套这个壳子呢,前面说过,为的就是解决上一代http协议的安全问题。那为什么又是SSL,又是TSL呢,他们有什么区别呢?其实就是一套东西。刚开始诞生的时候就叫SSL(安全套接字层),一开始是由一个叫网景的公司开发出来的,后来这个公司倒闭,IETF(一个管理互联网技术规范的组织)接手了这个协议,重新起了个名字叫TLS(传输层安全),就是这么回事,哈哈。明白了https为什么产生,以及多出那个S是个啥玩意,下面开始正经说下这个“S”到底是如何实现http协议安全性的?
四、HTTPS如何实现安全?
相信如果你自己研究过https相关的东西,一定听说过以下这些概念:对称加密,非对称加密、证书、数字签名,公钥、私钥。。。等等。网上有非常多关于这方面的理论解释,相信每一个概念如果深入研究下去都会是一个课题,我们的重点只放在对HTTPS实现轮廓的理解上。
我们知道了http不安全,那到底如何不安全呢?我不打算像大多数博文一样上图+解释了。我用一个例子来说明一下。前面说过用户和网站的交互就像日常生活中人跟人之间的交流一样。正常人的交流内容如果没有什么要紧的需要保密的,那被别人听到也就听到了,那如果我们需要交流的内容是有隐私的或者需要保密的,那如果被别人听到可能就会有很大问题。电视上谍战剧大家都看过吧,地下接头都是暗号先对一下,没有暗号那对不起,再见。这个暗号就相当于一个密码啊,对接头行动进行安全保障。考虑到安全,这个暗号应该只有接头的双方知道。放到网络通信里,这其实也是https要解决的核心问题,让http通信安全的进行。暗号其实就是对http过程的加密,这种加密的方法就是对称加密方法(用同一个暗号)。
看到这里,很多人会觉得,那这多简单啊,弄一个暗号,大家就用这个暗号来接头呗。这样想的童鞋其实是没有考虑到很多现实的问题:
1、暗号怎么产生呢?
2、有了暗号后怎么安全的让双方都知道这个暗号?
其实安全都是建立在最初阶段的基础上,是一种底层设计的东西,底层不安全,后续的都不会安全,就像大楼的地基会影响整栋楼一样。 回到接头这个例子,初次接头其实大家是不知道暗号的, 难的就是这第一次的暗号怎么安全的让彼此知晓。一但成功安全的交换了暗号,那后续的接头就会变得简单。
问题来了,我们解决问题:
第一、暗号怎么产生? 这个其实没有太多规矩,只要保证暗号能用且不可预期就好。https协议是客户端随机产生一个KEY
第二、如何保证这个暗号的安全?直接传递暗号肯定风险太大,万一暗号被偷听泄露了,那之后所有的接头都是不安全的了。
回到谍战场景,为了保证暗号安全,上线可以提供一个预先准备好的箱子给下线用于盛放暗号---这就是公钥 钥匙只有上线那里有---这就是私钥 ,==》这种用公钥加密,私钥解密的加密方法就是非对称加密
同时也给出一些能证明上线身份的东西 ,比如属于哪个组织啊什么的,-----这就是数字证书(公钥+身份证明)
下线拿到这个箱子后,把暗号放到箱子里,锁好,再还给上线。这个过程即使有人中间得到这个箱子也没用,因为只有上线那里有钥匙啊。至于有人会说可以撬开箱子啊什么的,那这个就牵涉到箱子的牢固度,放在网络通信里就是算法的强度,说的白点,这个箱子坚固到除了用配套的钥匙打开外别无他法。
那么问题又来了,数字证书这个方法只解决了通信过程中的安全问题,那通信双方的身份怎么验证真假呢?下线的的身份验证只要双方都安全的知道了暗号还好说,关键是一开始的放暗号的箱子是上线给的,上线如果是假的,或者被敌方抓住策反了,自然之后所有的接头(通信)都是不安全的了。
回到验证上线身份的问题,这个上线的真假对于下线来说基本无法判断,唯一的方法就是去一个权威的地方核实一下,这个权威肯定是所有人都认可的。----这就是CA颁发机构 有人可能会说,这个权威万一也沦陷了呢? 好吧,其实是存在这个可能的。这个其实就是信任链的问题,跟安全链是一个道理,如果信任链顶端都有问题,那下面所有的信任都没有基础了,所以数字证书的颁发机构本身的安全相当重要啊!从以上非对称加密的原理可以知道,对于根证书机构来说,私钥是最重要的,所以私钥一但泄露,整个信任链都会崩溃。
上线的身份也验证了,暗号也通过安全的方式进行传输了,看似无懈可击了,那有没有什么问题了呢?细想一下,还有一个地方存在薄弱环节,那就是那个放暗号的箱子,这个箱子其实大家都可以获取到(所以叫公钥),如果这个箱子被掉包,那暗号自然也就泄露了。所以需要对这个箱子进行加固呢。谍战剧里有一个方法,就是对物品做标记,这个标记是很难被仿制或模仿的,即一但有人对这个箱子做了手脚,上线拿回这个箱子一看就知道了。-------这就是数字签名
梳理一下以上提到的,https其实解决了以下几个问题
1、数据的保密性 对称加密
2、对称加密密码传输的安全 非对称加密
3、服务器身份验证 数字证书
4、数字证书的安全 数字签名
发现没有,安全的问题都是一环一环的,也许为了解决某个安全问题想了一个办法,但是这个办法本身又有漏洞,于是又要想办法修补这个漏洞,循环往复,直到没有明显漏洞(至少当下看起来是),这其实就是开头所说的技术服务于实际需求和问题。你绝对不会看到一个技术毫无用处而被发明出来,如果有,也会迅速被淘汰。
不知道这样讲https能让你听懂么? 反正我是这么理解的哈,毕竟事物相似而不同,类比之处难免有疏漏,如有发现,还请指正。
最后来张数字证书的图镇楼: