位置:首页 > 安全分类 > WEB安全

为什么说HTTPS协议比HTTP协议安全?

2021-05-08 17:50:30 来源:
简介大家好,我是你们帅帅的盾叔,今天又是一个周五,很快啊,你们期待的周末就要来了!!既然如此,我们今天就少整点晃眼的代码,来看点有兴趣的,走你!不知道大家有没有注意到,我们以前浏览网页时。

大家好,我是你们帅帅的盾叔,今天又是一个周五,很快啊,你们期待的周末就要来了!!

既然如此,我们今天就少整点晃眼的代码,来看点有兴趣的,走你!

不知道大家有没有注意到,我们以前浏览网页时候,浏览器上方显示的网址都是HTTP开头的,而不知道什么时候起,网页的开头都变成了HTTPS,那这就有意思了,毕竟一件事情不可能无缘无故的去改变,那么网址开头这个多出来的原因是什么呢?

答案是:原本的HTTP协议,它不安全!!

为了搞清楚HTTP和HTTPS协议他们各自的原理以及差异,盾叔特地找到了王老师(网盾网络安全培训讲师王迎银),王老师对于我的问题也做细致的解答。

NO.1 什么是HTTP协议?

HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。

HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通讯报文如下:

请求:

POST http://www.baidu.com HTTP/1.1 Host: www.baidu.com Connection: keep-alive Content-Length: 7 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 wd=HTTP

响应:

HTTP/1.1 200 OK Connection: Keep-Alive Content-Encoding: gzip Content-Type: text/html;charset=utf-8 Date: Thu, 14 Feb 2019 07:23:49 GMT Transfer-Encoding: chunked <html>...</html> NO.2 HTTP 中间人攻击

HTTP 协议使用起来确实非常的方便,但是它存在一个致命的缺点:不安全。

我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?

下面来举个例子:

(1)盾叔在 Java 贴吧发帖,内容为我爱 java:

(2)被中间人进行攻击,内容修改为我爱 PHP:

(3)盾叔被群嘲

可以看到在 HTTP 传输过程中,中间人能看到并且修改 HTTP 通讯中所有的请求和响应内容,所以使用 HTTP 是非常的不安全的。

NO.3 防止中间人攻击

这个时候可能就有人说了,既然内容是明文那我使用对称加密的方式将报文加密这样中间人不就看不到明文了吗,于是如下改造:

(1)双方约定加密方式,如下图:

(2)使用 AES 加密报文,如下图:

这样看似中间人获取不到明文信息了,但其实在通讯过程中还是会以明文的方式暴露加密方式和秘钥,如果第一次通信被拦截到了,那么秘钥就会泄露给中间人(哦豁,完蛋),中间人仍然可以解密后续的通信,如下图:

那么对于这种情况,我们肯定就会考虑能不能将秘钥进行加密不让中间人看到呢?答案是有的,采用非对称加密,我们可以通过 RSA 算法来实现。

在约定加密方式的时候由服务器生成一对公私钥,服务器将公钥返回给客户端,客户端本地生成一串秘钥(AES_KEY)用于对称加密,并通过服务器发送的公钥进行加密得到。(AES_KEY_SECRET),之后返回给服务端。

服务端通过私钥将客户端发送的 AES_KEY_SECRET 进行解密得到 AEK_KEY,最后客户端和服务器通过 AEK_KEY 进行报文的加密通讯。

如下图:

可以看到这种情况下中间人是窃取不到用于 AES 加密的秘钥,所以对于后续的通讯是肯定无法进行解密了,那么这样做就是绝对安全了吗?

所谓道高一尺魔高一丈,中间人为了对应这种加密方法又想出了一个新的破解方案,既然拿不到 AES_KEY,那我就把自己模拟成一个客户端和服务器端的结合体。

在用户→中间人的过程中中间人模拟服务器的行为,这样可以拿到用户请求的明文,在中间人→服务器的过程中中间人模拟客户端行为,这样可以拿到服务器响应的明文,以此来进行中间人攻击:

这一次通信再次被中间人截获,中间人自己也伪造了一对公私钥,并将公钥发送给用户以此来窃取客户端生成的 AES_KEY,在拿到 AES_KEY 之后就能轻松的进行解密了。

嗯。。。按这个思路,那盾叔这是被安排定了?

当然不是!

NO.4 什么是HTTPS协议?

HTTPS 其实是 SSL+HTTP 的简称,当然现在 SSL 基本已经被 TLS 取代了,不过接下来我们还是统一以 SSL 作为简称。

SSL协议其实不止是应用在 HTTP 协议上,还在应用在各种应用层协议上,例如:FTP、WebSocket。

其实 SSL 协议大致就和上一节非对称加密的性质一样,握手的过程中主要也是为了交换秘钥,然后再通讯过程中使用对称加密进行通讯。

如下:

这里只是一个简单的示意图,其实真正的 SSL 握手会比这个复杂的多,但是性质还是差不多,而且我们这里需要关注的重点在于 HTTPS 是如何防止中间人攻击的。

所以,对于HTTP和HTTPS这两个协议,大家都有所了解了吗?

这里再次感谢王老师的知识赞助~

每次我去找王老师哥,他都会跟我吐槽,天天工作有多忙,一个人干三个人的事儿,拿三个人的钱,看着很爽,但是累啊。

盾叔只能在旁边喊着666,嗨,看看,大佬说话就是不一样。

不过王老师有的话确实没毛病,现在网络安全行业的人才缺口非常之大,而且人才的输入和需求之间的差距还在逐年递增,所以这个行业拥有非常大的前景,而且对针对人群没有硬性的要求,只要想进入这个行业,多这个行业有兴趣,想要像这个方向发展,就都可以来。

网盾安全培训学院现开展线下公开体验课活动,好不好,能不能,可以先看过再说话!!