00:00
同学们大家好,这节课呢,我们一起来学习一个非常经典的面试题啊,那这个题目呢,就是HTTP与HTTPS,它的区别到底是什么?那其实我们出去面试的时候呀,这个问题真的是经常会被问到啊,那他是非常非常经典的一个问题,那这个问题到底怎么回答呢?这节课呀,我们就好好的来分析一下。首先呢,我们先来看看面试官问你这个问题想要考察的到底是一个什么点呢?哎,那其实这里呢,重点要考察的就是大家对于计算机网络基础知识的一个掌握情况啊,那比如说他要看看你对这个协议的一些基本的概念呀,特点呀,了解的到底是不是清楚,对吧?然后呢,还得就可以能看出来你对这个两个协议的通信过程到底是不是理解啊,那这些你要是都理解了的话,那回答这个问题呢,其实就很简单了。
01:01
那下面我们就来看看啊,如果要好好的能回答好这个问题,那我们需要掌握哪些东西呢?哎,首先呢,我们这两个协议的概念就一定要把它掌握清楚对吧?然后呢,我们要了解清楚这两个协议的通信过程,那都了解完了之后,它们之间的区别就非常的一目了然了啊。好的,那首先呢,我们就先来看一看概念啊,看看我们的HTTP和HTTPS到底是什么。首先啊,HTTP它呢叫做超文本传输协议。它呢是一个基于这个请求和响应是无状态的,是一个应用层的协议,那HTP呢,它其实是使用了TC pip的一个协议去传输我们的数据的啊,那它呢,是互联网上应用最广泛的一种网络协议,也就是说现在我们的这个客户端和服务端之间传递数据啊,大部分使用的都是我们的HTTP协议。
02:02
但是呢,我们这个HTTP啊,它也是有自己的一个缺点的,那就是啊,我们的HTTP协议它是以明文的方式去发送我们的这个信息的啊,他没有给我们的信息提供任何的一个加密措施,那既然它是明文发送内容,那其实呢,就会存在一些安全方面的问题,对吧?那比如说呢,我们一些很重要的数据就很有可能会被截获到啊,那截获到了之后呢,因为你是明文传输嘛,所以说呢,第三方攻击者就可以直接看懂其中的这个信息啊,那如果你是一般的简单的数据,那可能也无所谓这个安全缺陷了,对吧,但是呢。如果你是涉及到类似于银行密码这样的数据,那这个就非常非常的不安全了啊,那所以说呢,其实HTTP协议它是不太适合传输这种敏感信息的啊,那除了会被明文的获取到之外呢,哎,使用HTTP协议呢,这个通信的双方呢,也是非常有可能会被假冒的啊,也就是我们的第三方攻击者呢,他有可能会冒充客户端向我们的服务端去提出请求,对吧?或者是说呢,哎,他还可能冒充我们的服务端去给客户端提供一些这个虚假的一些信息,对吧?这也是非常不安全的啊,那再有呢,就是使用HTTP协议呢,它这个传输的报文数据呢,也是非常容易被截获,并且去被进行篡改的啊,所以说呢,这些都是我们使用HTTP协议它的一个不安全因素。
03:35
那为了解决我们HTTP协议的这个缺陷,那这个时候呢,我们就发展出来了另外一种协议啊,就是我们的HTTPS协议。那HTTPS呢,它的全文啊,全名啊,叫做安全套接字层超文本传输协议,那其实从这个名字也能够看出来,对吧?哎,它呢,其实是在HTP的基础上又加上了一个S对吧,那这个S呢,其实就是我们的安全的一个防护,对吧?也就是说呢,通过我们的HTTPS,它可以在计算机网络上去进行一个安全的通信啊,它是一个可以进行安全通信的一个传输协议。
04:16
那为了保证这个安全,其实呢,HTTPS它是在HTTP的基础上又加入了一个叫做SSL,然后TLS的这样的一个协议啊,那一般来说呢,可能我们就会直接把它叫做SSL协议了,对吧?他俩呢,其实是一个东西啊,只不过呢,刚一开始的版本叫做SSL,后来发展到一定程度之后呢,它改名了,又叫做了这个TLS对吧?那其实呢,它俩是一个东西啊,只不过是在不同的阶段它叫了不同的这个名称,那加入了这个协议之后呢,这个协议呢,就可以来验证我们服务器的身份,并且呢,为我们的客户端和服务端之间的通信去进行加密,那所以说呢,我们的HTTP加上了加密,加上了认证,再加上完整性保护之后。
05:04
就变成了HTTPS协议啊,这个呢,就是我们这两个协议的一个概念。那这两个协议它的通信过程又是怎么样的呢?哎,接下来呢,我们就分别的来看一下。首先先来看HTP的通行过程啊。那其实在HTTP开始工作之前呢,哎,我们客户端首先需要先和我们的服务端去建建立连接,对吧?那这个连接呢,其实是通过我们的TCP来完成的,那这个时候它连接的时候呢,是需要连接到服务端的八零端口啊,那么TCP要进行连接啊,那他要进行三次握手啊,那其实呢,就是我们图中的这样的一个过程对吧?那首先客户端需要先和服务端去打个招呼,哎,说你能听到我说话吗?对吧?哎。看看我们的服务端能不能收到自己的信息对吧?那这个时候服务端收到信息之后呢,就需要给客户端去进行一个回复啊,告诉他说是我能收到你的信息,那你能听到我说话吗?诶,那接下来呢,客户端收到了服务端的信信息之后呢,也需要再回复一下,就告诉服务端说,哎,我能收到你的信息对吧?那现在呢,我们的连接成功了,接下来我就要开开始给你发数据了,哎,这就是我们整个TCP连接三次握手的这样的一个过程,那一旦建立起来了TCTCP连接之后呢,客户端接下来就会给服务端去发送我们的请求信息,对吧?首先他会先发送请求命令啊,那这个请求命令呢,就。
06:37
包含了我们的一个请求的方法啊,还有我们的一个请求的一个地址,还有呢,就是我们这个使用的协议的版本号啊,这是我们的第一次发送,那发送完请求命令之后呢,接下来他会继续发送我们的一个请求的头信息,对吧?头信息里头呢,诶,它会发送一些其他的一些设置方面的信息,比如说我客户端自身的一些信息呀,对吧,我我这个你的一些域名信息呀,哎,都会在请求投信息当中去进行一个发送。
07:08
那发送完了之后呢,诶,客户端会再给服务器,呃,服务端去发一个空白,行啊,告诉他我这个头信息已经发完了,那接下来呢,如果说你有这个请求体的话,那么你的这个请求体会继续的再发送给我们的这个服务端,哎,这是整个我们客户端发送请求信息的一个过程。那服务端在收到客户端的这些请求信息之后呢,诶,他会给出一个响应的信息啊,那响应信息的第一部分呢,就是它会发送一个这个协议的一个版本哈,还有一个响应的状态码啊,那发送完这两个之后呢,接下来它会返回我们的一个响应头信息啊,头信息完了之后呢,也会发一个空白,行啊,表示我们头信息就已经发完了,接下来呢,它会去根据我们这个头信息当中content type这个字段当中所描述的那个格式啊,然后呢,就使用这个格式去把我们对应的一个响应题发送给我们的一个客户端,诶这个呢,其实才是客户端想要拿到的一个实际数据啊。
08:12
那到这里面呢,诶,我们的这个响应也发回去了,对吧,一般情况下,一旦我们这个服务端和客户端发送了这个响应数据之后呢,我们TCP应该就要连接了,哎,就要关闭连接了啊,那关闭TCP连接呢,一般来说我们要进行四次挥手这样的一个过程。那四次挥手是怎么样的过程呢?首先啊,客户端会告诉服务端说是我这边数据已经发完了啊,然后呢,客户端说好,我知道你发完了,那我这边可能还没发完,我去确认一下,你等会儿啊,然后等一会儿呢,我们的服务端确认完了,说好我的数据也发完了啊,然后呢,客户端会说好的我知道了,那现在我们就可以断开连接了,对吧?诶这个呢,就是我们整个四次挥手的一个过程,那下面呢,我们的这个TCP连接就正式断开了,那大家要注意,如果说客户端或者是服务端在头信息里面加入了一个叫做connection,那么connection里面它的这个值如果是这个keep alive的话,那么这个时候呢,我们整个响应完了之后呢,它的这个TCP连接呢,会仍然保持打开的一个状态啊,我们的客户端和服务端之间就可以继续的去进行这个信息的一个传输,那这样的话呢,其实是可以省,就是省一些我们这个TCP连接的一个一个时间的,对吧,还节约了一些带宽啊,这个呢就要看我们的头信息里怎么。
09:31
设置了,那大体呢,一次完整的通信过程就是这个样子的啊,这是HTTP的一个通信过程,好,那接下来呢,我们再来看看HTTPS的通信过程。这个就比较复杂了,对吧,那因为前面已经介绍过了啊,为了我们数据传输的一个安全性,那HTTPS呢,它是在HTTP的基础上又加入了这个SSL,然后TLS的这个协议,那这个SSLTLS它也是需要进行连接的啊,那它的这个连接过程呢,大家看还挺复杂的,对吧?下面呢,我们就来一起看一下这个具体过程啊。
10:10
首先第一步客户端呢,肯定也是需要先去发起一个HTTPS的一个请求,对吧,那这个请求呢,连接到的就是我们服务端的443端口啊,要注意我们这个端口的不同,那这次呢,其实就相当于是客户端的一个打招呼的一个过程,对吧?那客户端呢,就会把说是哎,我我我现在想要去进行一个HTTPS的连接,对吧?然后呢,会把我客户端现在支持的这个协议的版本呀,加密的组件呀,还有客户端的一个随机数啊,支持的一些压缩方法呀等等这些啊一起传输给我们的服务端。那服务端拿到之后呢,诶,他会给客户端一个响应对吧,他会告诉客户端说,哎,我收到你的信息了,而且呢,我根据你发给我的这些什么版本啊,加密组件之后,我自己选好了一个,咱咱们就用这个啊,你就用我放包里的这个,我们后面来进行加密简历就可以了,并且呢,服务端也会把自己的一个服务端随机数啊,通过这次的这个响应发送给我们的这个客户端。
11:14
好,那发完了之后呢,接下来啊,服务端还会继续的把它的数字证书也发送给客户端,那这个数字证书呢,其实里头就包含了服务端的一个公开密钥啊,因为呢,采用这个HTTPS协议的服务端啊,它必须得有一套自己的数字证书,那这个证书可以自己做,也可以像CA组织去申请,那区别呢,就是你自己做的证书的话,需要客户端验证通过才可以继续访问,那如果说你是像CA这种受信任的公司去申请的证书的话,是不会弹出来这种提示页面的啊,那这个数字证书里面呢,就包含了我们服务器的公开密钥啊,而且呢,还包含了这个CA权威机构的一些信息的,这个CA机构服务器的域名,对吧,还有经过CA这个私钥签名之后的一些证书内容,还有一些其他的什么这个签名计算方法呀,还有证书对应的域名啊等等这些信息啊,都会包含在我们的数字证书里面。
12:13
那接下来发完之后呢,服务端会再给客户端发一个说是,哎,我现在握手信息已经发完了啊,上面这些就是我要发的东西,对吧?那接下来呢,客户端啊,他拿到我的这个,拿到服务端的这个数字证书之后呢,他需要先去验证一下,那客户端验证的时候呢,就需要使用自己的这个SSLTLS来完成这个数字证书的一个验证啊,那他验证的时候呢,首先会先去验证一下啊,你的这个,呃,服务端的这个公公开密钥是否有效啊,而且就是说。嗯,比如说你得这验证一下服务端给你发过来的这个数字证书是否有效啊,比如说你的这个颁发机构对吧,比如说你的这个过期时间等等,那如果说你的这个证书有异常的话,它会弹出一个警告框啊,提示你这个证书存在问题,那如果说是验证了这个数字数字证书没有问题的话,那么就会生成一个呃,新的一个随机数啊,这个随机数呢,一般会叫做这个prime master啊,它呢是生成我们绘画密钥的所需要的一个随机数。
13:19
好,接下来呢,有了这随机数之后,大家看现在呢,其实我们客户端服务端啊,他们手里都有三个随机数,对吧?一个是客户端随机数,一个是服务端随机数,一个呢是收到数字证书之后,又生成了一个叫做prime master的随机数,有三啊,那所以接下来呢,哎,客户端呢,就需要拿到这三个随机啊,拿到这三个随机数去生成一个绘画密钥,这个绘画密钥呢,就叫做master secret,它呢是一个对称加密的一个密钥,那这个密钥呢,只需要安全的发送给服务端之后,那么后面呢,这客户端和服务端就可以使用这个会话密钥去加密解密信息了啊,但是呢,要发要安全的去把这个会话密钥发给服务端呢,哎,我们是不是就还需要再去对它进行一次加密啊,用什么加密呢?哎,就用服务端数字证书当中的那个公开密钥来加密一下这个会话密钥,那加密完了之后呢,发给服务端,因为服务端那边有私钥就可以解开这个。
14:19
药就拿到我们这个绘画的这个这个密钥了,对吧?哎,所以说呢。客这个客户端这边先来生成一个会话密钥,并且用服务端数字证书当中的公开密钥,先把这个会话密钥加密一下,加密完了之后,哎,客户端就把这个加密过后之后的会话密钥发送给我们的服务端啊,那服务端。呃,发完之后呢,然后呢,客户端还会告诉服务端说这个密钥已经发送给你了,然后我后面给你发的消息就都会通过绘画密钥来进行加密了啊。好,那接下来呢,服务端收到这个被加密过之后的绘画密钥之后呢,就需要用自己的私钥来给它解密一下,解密完了之后呢,诶,就会得到我们这个绘画密钥了,对吧?得到绘画密钥之后呢,服务端就需要给客户端再发一个消息,告诉客户端说,诶,我已经得到这个绘画密钥了,那之后呢,我发的消息也就都要开始使用这个绘画密钥去加密发送了,好,他到这里呢,他会告诉你说我的所有的信息已经发完了,好整个这个过程就是我们这个哎,SSLTLS安全连接建立的一个过程。
15:34
对吧,那安全连接建立完了之后,接下来呢,就可以去进行正常的HTTP通信了,对吧,只不过通信的内容呢,都是经过加密的,请求也是加密的,响应也是加密的,对吧。那在HTP通信完成之后呢,最后啊,如果说你的这个通信完毕了,那就可以由我们的客户端啊,去发起一个关闭SSLTLS连接的这样的一个请求。
16:02
对吧,那发完了之后呢,我们的这个呃,SSLTLS连接就关闭了,那当然了,这个关闭了之后呢,我们下一层还有TCP的一个连接的关闭,对吧?所以说呢,这个关完了之后,接下来TCP的这个四次挥手呢,依然会进行啊,所以说这个其实就是我们HTPS的一个大体的一个通信过程啊,那从上面的概念,还有这两个通信过程,我们是不是就能够很清楚的看出来HTTP与HTPS的协议啊,它们之间的区别都有什么了呀,对不对?那最后呢,我们就来总结一下这个问题应该怎么来回答呢?哎哎,如果说我们被问到HTTP与HTPS的区别都有什么,根据上面的我们是不是就能回答出来了,首先HTTPS要比HTTP更安全,对吧?因为我们HTTP它是超文本传输协议连接,连接简单,它呢没有状态,并且信息是明文传输的,对吧,但是呢,HTTPS它可以。
17:02
可以通过SSLTLS来提供一个安全的方式。所以说。HTTPS要比HTTP更安全。那么第2.http和HTTPS它呢,是使用了完全不同的连接方式,对吧,因为HTTP它呢,前面是使用了TCP的一个连接,然后直接就进行这个这个请求和响应了,对吧,但是呢,HTTPS它还要经过SSLTLS的一个安全握手的一个过程,所以说他们的连接方式是不一样的。那接下来呢,这两个协议他们使用的端口也不一样对吧?HTTP是八零端口,HTTPS是443端口啊,那还有呢,就是我们HTTPS协议它是需要用到数字证书的,对吧?所以说呢,它需要到CA去申请数字证书,可能呢是需要一定的费用的啊,所以说呢,总结来说,他们之间最大的区别就是我们的这四条啊好,那通过上面的这个分析,大家应该可以很清楚的弄清楚这两个协议的这个区别了吧,那下次面试的时候,如果再被问到的话,大家已经可以很棒的去把它回答出来了哈,好,那这个呢,我们就给大家介绍这么多。
我来说两句