00:00
好了,这节课开始呢,我们给大家讲一讲HTTPS协议啊,讲HTTPS协议之前呢,我们就先了解一下这个HTTP协议是因为它不安全,它究竟怎么不安全呢?我们来看这么一张图,这是正常的一个用户啊,上网访问我们的服务器的基本的流程啊,他要接入互联网,然后呢,我们的服务器接入互联网,在底层网络上呢,呃,是通过我们我们的这个客户端的最底层的socket,也就是基本的网络接口,呃,是基于网卡的那个特别基础的网络接口啊,它可以向外去发送数据包。啊,我们在这呢,管它叫socket,也就是大家在学编程的时候呢,可能会学这个socket编程。在S的编程我们学习的时候呢,会学习TCP的呃编程和udp的编程,那么这两种就已经是这个稍微上层一点的网络协议了,这soet是基于我们操作系统更底层的协议啊,它和物理硬件去呃完成连接,或者说它基本上是我们无法操作的这种呃协议啊,它通过这个操作系统的内核和这个网卡驱动去传输数据了。在上头的TC pip协议在数据传输的时候,其实也是偏向于比较底层的啊,我们如果要是发送一个数据包过去。
01:19
对方的服务器们基本上是不知道这个数据包它到啥时候会终止,基本的TC pip协议只是传递数据的,那我们通常会在TC pip协议上再加一层我们的应用层的协议,前面这两个呢,都是底层协议,后边HTTP协议就属于是应用层的高级协议了,大家也知道越高级的东西呢,也就也就越简单,那么是使用的时候越简单,但是在底层呢,它就会比较复杂,那总的来说呢,一个HTTP的数据请求包呢,它会分为头和铁。那它的header和呃,Body head里面呢,会包含这些呃参数,然后body里边呢,会真实的去传递我们想要传递的数据,比如想要上传一张图片,那么这个图片是在包里的,对吧?那么说HTTP协议它不安全,就是因为它用了这几个底层协议,它没有一个是能够保证数据在传输过程当中是安全,不会被劫持的。
02:15
那么呃,大家也就知道,诶,我们电脑一般来说都会装防火墙对吧?诶,那我们的这个服务器也都得装防火墙,这防火墙能不能防住我们数据不被别人这个窃听监听呢?其实不会的啊,它只能够防住,比如说我们在自己的电脑这一端,我能防,防止我们的一些呃这个端口啊,不莫名其妙的别往外去传递数据。对吧,那你想想我这个拿浏览器去访问一个网址,填我的银行卡的账号密码,那这算是防火墙应该被拦截的范围吗?这肯定不是啊,对吧,那他我们本地的防火墙还会防什么呢?一些病毒或者一些未知的这些程序,对吧?它向网络去发送数据。
03:00
那这个呃,其实和我们正常访问也是不一样,正常访问的情况下它就不安全,它不在防火墙的这个安全规则之内,也就是它无法保证数据传递的安全性,服务器端也是服务器端的防火墙呢,一般来说会屏蔽一些端口号啊,我只开放某些端口呢,对互联网可以访问,然后还有就是呃一些这个这个呃更高级的一些规则,比如说你重复去刷新,间隔时间过短,这边的防火墙呢,会根据规则去屏蔽一些用户的访问,他都没法去保证在互联网的传递过程当中这份数据的安全性,那这份数据究竟有多不安全,我们在接入互联网的时候,大家要知道我们每一个呃接入互联网的这些设备,比如说我的手机,呃,比如说我家里的电脑,或者是这种智能电视。它都会连到哪儿家里的路由器对吧。家里的路由器会连到我们小区里的总的路由器。小区里的总的路由器会连到哪儿?它会连到,呃,这个你当前所在区的,比如说我在朝阳区,朝阳区某一个街道还会再放置一个呃,大的这个路由网关,然后除了这个路由网关之外呢?呃,在这个区里边还有一个大的,然后市里有一个大的,还能接入到我的骨骨干网络,如果你访问的目标服务器是在美国,可能会穿过的节点多达十几甚至二三十个。
04:25
那么每一个节点都要帮我们去把这份数据,这个数据包传递到下一个节点,那一个节点到另外一个节点,这种不间断的传递,那最终我们才能访问到我们的服务器,那在每一次呃传递的过程当中,在当前这个节点内,其实都是可以看到我们当前所传递这份数据的。这份数据在传递的过程当中,它以二进制的形式存在,其实就是0101,那么这份数据包一旦要是被我们中间的这个节点给拦截了,诶,他如果能够猜出来我们用的是什么协议,比如说呃,你是TCP协议下上边的HTTP协议,我直接按照HTTP协议去截你的这个数据本。
05:10
解包,我就能直接把它给解开,解开之后就能读到你的铭文。他读到这个铭文之后,我就知道你想要干嘛了,比如说你给你女朋友发了一个比较私密的消息,被别人呃这么在中间拦截到,如果要是呃,你的银行卡啊,在登录的时候,你的账号密码被别人拦截到的,安全的这种影响要远远大于你这些私密的信息,对吧?那所以HTTP协议在数据传输的过程当中是不不安全的,而且呃有很多节点都可以监听得到,所以在这也提示大家尽量不要在呃这些公共场合上面去连接这种莫名其妙的这种呃WiFi,呃尽尽量不要呃在这种地儿呢去嗯传递一些比较私密的一些东西,尤其是我们自己开发的,而且没基于这种安全协议,那么想要解决这个问题。
06:08
呃,那我们就势必要呃增加一层安全的协议,那这种安全的协议,呃就要基于HTTP啊,或者是呃基于TCP,不管是基于哪层协议,我们想要它安全,那我们在两端呢,都得在额外加一层安全协议。HTP协议,呃,之所以谈到协议,安全协议、HTTP协议,这都是协议,协议就是双方要达成共识,比如说我们自己的这个客户端。比如说服务器端。这两端要达成共识,商量好哎,然后签了一纸合同,比如说你入职之后签了这个劳劳动合同,这东西就是协议,那客户端要遵守,作为我们工作者,那么服务器端作为呃这个这个公司也要遵守,两边都要遵守同一份协议,那么他们才能够互相配合啊,才能够互相去呃协同去工作,呃,我们的这些网络协议其实也是一样的,客户端的要遵循,服务器端也要遵循HTTP协议啊,服务器端要实现HTP协议,客户端呢,我们要用呃这种呃。
07:18
支持HTP协议的这些浏览器或者是APP,然后使用这个HTP协议来访问我们这个服务器,双方一定要达成共识。安全协议也是一个道理,那我们在HTP协议下传递数据包的时候,其实它是透明的。这种透明数据包的传递。我们想要在在此基础之上呢,再增加一层安全的协议,其实最简单来说,呃,有一个叫凯撒密码。或者叫凯撒加密法啊,呃,他的这种加密方法呢,很简单,比如想要去传递一份铭文的数据,叭,如123,那么我可以啊,让它往后边挪一位,把它变成呢,经过凯撒的这种凯撒密码的加密,这当当然是在这种古罗马时代啊,在那种呃,冷兵器时代去。
08:09
传递信件的时候,他用这种方式去加密,把它改成231,我所传递的所有数据呢,我往后边给它挪一位,那中间拦截者,这封信如果要是被别人拦截到,他看见的其实是23231,而不是123,这是铭文。这边呢是密纹。铭文和密文之间接这个经经历了什么呢?加密算法。我们管它叫凯撒加密算法,它的算法比较简单,只是往后边挪了一位,把所有的数据包,那在挪了一位之后,我们服务器端还看得懂,看不懂,它是不是默认情况下他也看不懂,所以这个服务器端呢,它得干嘛,它得实现。
09:00
它得实现这个加密的协议。把这套算法也要引入这个服务器端,通过这套算法去解密,把这个密文。解密,解出来才能得到铭文。这是最简单的一种加密算法,那这种加密算法在网络当中传递。它传递的是密文,两边传递都是密文,客户端在发送请求的时候,把铭文加密成密文,然后再然后再发向网络。然后这个服务器端接到之后,把密文转换成铭文,读懂之后,想要返回的数据也把它通过相同的加密算法,诶给它给。返回去中间拦截者得到的数据呢,呃,也就是加密的密文了,他也看不懂。那这种叫。对称加密。所谓的对称加密,就是双方采用同一种算法,然后互相去加密和解密数据,那么这种加密的方式比较简单。
10:06
那这种对称加密算法的弱点也非常明显,那尤其是在我们现在这种大的互联网环境下,我们用哪种对称的加密算法呢?这种加密算法究竟有多少个?那首先这种加密算法我们一定要知道,它一定要内置到我们的服务器当中。这是导致我们加密算法在互联网当中使用,呃,或者说对称加密算法在互联网当中使用不安全的决定性因素,因为对称加密算法它一定是固定的,比如说我就挪一位啊,我们叫凯撒加密算法,我们就再改一个叫上规谷加密算法,我可以往后边挪三位,但不管是你怎么做这种对称加密,你这种对称加密的算法一定要内置在服务器端,那么这个服务器端我们现在正在学的是啥,就是NG嘛,对吧,我们想要在NG里。使用它的这种对称加密算法,那么这个NG它是不是公开和开源的?
11:06
那既然它是开源的,它就是面向于互联网的,对吧?那么这种互联网上是不是任意的一些用户都可以下载得到这个NG,并且能读懂它的这种对称加密算法,一旦要获得了,获得到了它的这种对称加密算法这个列表之后,那中间拦截者。是不是也能得到这个对称加密算法的列表,因为NG是开源的嘛,那他可以拿着这些,不管是你三种五种还是500种,我就拿着几百种加密算法,我挨着克挨着个去破解你的这个密文,是不是也能行得通,因为他必须得是公开开源的。对吧,我们的客户端也是我们的客户端,假如我们使用浏览器。那么他也要内置这些加密算法,比如我们这凯撒加密算法上硅谷加密算法,他如果没有内置加密算法。
12:01
那他就没法加密数据,服务器端也读不懂对吧,所以浏览器也是没有我们用户参与进来,然后服务器端呢,这些加密算法又是公开的,那么所有人都能知道你现在可以使用的加密算法的这些列表,拿过来之后就挨着个去尝试是不是就可以破解了,所以对称加密算法由此而来就已经不安全了。对吧。那这个对称加密算法,就是因为它的这个算法不够灵活,这是单一的加加密和解密啊,才导致他现在这个不够安全啊,这再给大家总结一下,就是因为这个加密算法在客户端要有,然后在服务器端要有,那我们我们想要灵活呢,就没法保证客户端的算法和服务器端的算法,呃,它能够保证一致,也就是说我们想要个性一点啊,你服务器端的内嵌的算法呢,往后边挪一位和挪两位,那挪一位和挪两位,这个是开源的对不对,那我们客户端我自己写一个,我想让他挪三位。
13:02
那服务器端又没有啊,他这这事就达不到,所以我们可以让他稍微的变得灵活一点,在这对称加密算法之下,我们是不是可以在客户端请求服务器端的时候和他商量一下,接下来我们要怎么干,哎,这个商量呢,就可以让他在原来的算法之上呢,加入一个因子。呃,也就是说我在呃给你传递一个数据包,这个数据包呢,我先压缩加密啊,比如RA2,大家都用过zip啊,比如zip zip压缩包,我给zip包呢。数据啊,我给他Z用zip打个包,打个包之后呢,加一个密码。这个密码呢,是我客户端在第一次请求你的时候加的,那我在加这个密码之前,我先向你发一个请求。先向服务集团发一个请求,这个请求是用来干嘛的呢?哎,我告诉你,接下来我给你我要加密了啊,然后这个密码,呃,我这个我我我设一个数666。
14:06
那这个666啊,呃,一会儿我给你发这个压缩包,你你拿这个压,拿这个666去解这个压缩包,那大家想一下,这样是不是就安全了。你想想。啊,那我以后我再发这个数据包的时候啊,这个数据包是有密码的,然后这个呃协议呢,加密协议呢,我加入一个因子,你拿这个密码啊,然后才能够解开,你没有密码就解不开,这样就达到了灵活的特性,之前的这种加密协议,对称加密协议都是比较固定的,那想要的灵活,那这样是不是就灵活了,但这里边有一个巨大严重的问题,就是这个666这个密码我怎么给它给传过去,不被中间拦截者给他拦给给被这个中间拦截者给拦截住。那在这个加密之前,我在发送666的时候,这个666本质上是不是还没有加密对吗?那如果加密现在是不是就有这些对称加密算法,是不是也被也可能会被拦截住,被并且被破译解密开。
15:06
啊,那中间这些拦截者。想要不被他们看见,666这个事儿又成了一个难题。这个大家能听懂吧,啊其我再总结一下,就是压缩包上加了一个密码,但是密码我要告诉服务器端,他现在不知道啊,因为每一个客户端都不一样,我用666,你用888是吧,那我要告诉服务器端,接下来我用这个密码来进行加密,那这个加密告诉他这个过程又是不安全的。因为这次加密你只能基于TCP协议对吧?啊或者基于HTTP协议对吧,这不,这不能基于安全的这种协议,即使你是用对称加密,它也是不安全的。那么这会儿又一个难题出现了,这怎么办?我总不能,哎,我再给他。666再加一次密,然后再告诉他666的加密的密码。啊,对吧,啊,这也不行吧,是吧,那陷入了无尽的黑洞,所以对称加密算法在这是无解的,因为你在互联网的数据传递过程当中。
16:10
这个加密的密文数据是不被保证安全的啊。
我来说两句