网络面试:HTTP的缺点以及HTTPS的原理,这篇讲的真的很浅显易懂了

我们都知道HTTPS是HTTP的改进版本,那么在了解HTTPS之前,我们首先来看看HTTP存在的缺点:
  • 使用明文(不加密)进行通信
  • 不验证通信方的身份,可能遭遇伪装
  • 无法验证报文的完整性,所已可能已遭篡改

为了避免这些缺点而可能导致的风险,就产生了HTTPS,也就是说HTTP加上加密处理和身份认证以及报文完整性保护后即是HTTPS


那么HTTPS是如何实现的呢?

HTTPS并非是应用层的一种新协议。通常HTTP直接和TCP通信,而当HTTP先和SSL(Secure Socket Layer)或TLS(Transport Layer Security)通信,SSL或TLS再和TCP通信时,也就是我们说的HTTPS了,我们可以看下图加以区分:

在这里插入图片描述
但是需要注意的是,SSL独立于HTTP协议,其它应用层协议如SMTP等等也可以配合SSL协议使用。
可以看到,HTTPS的安全保证由SSL来完成,在介绍SSL如何保证安全之前,我们首先来看看两种主要的加密方式:


两种主要的加密方式:

对称密钥加密:
这种加密方式的加密算法是公开的,密钥是保密的,加密和解密采用同一个密钥,也就是任何人得到了密钥就能进行加密和解密
弊端:在进行通信时,也必须把密钥发给对方,否则对方无法解密,而在把密钥发给对方的过程中,就存在安全问题

非对称密钥加密:
这种加密方式有两把密钥,一把公钥,可以公开告诉任何人,一把私钥,只能自己持有,以下描述一下通信方式:

A:我要给你发消息了,把你的公钥给我吧
B:好的,公钥这就给你
A:我用你的<公钥把消息加密>了啊,你用自己的私钥就可以打开,保管好你的私钥啊,
   别被人拿走了,要知道只要有你的私钥就能解密啊,没有私钥就无法解密
B:收到A发送的用公钥加密的消息,用自己的私钥打开,发现消息是XXX

弊端:使用公钥对消息加密速度比较慢


HTTPS采用的加密方式:

为了取长补短,HTTPS采用的是对称和非对称两种加密方式相结合的加密方式,首先使用公钥加密对称密钥,双方协商好对称密钥之后,再使用对称密钥加密消息进行交流,这就克服了对称密钥加密方式中,密钥容易被攻击者获取,非对称密钥加密方式中,消息加密比较慢的不足了

到了这里,私密消息就加密成功了,但是!!!根本问题并没有被解决,隐私还是有可能被泄露,下面模拟下这个过程(A和B发送消息,C为攻击者:

A:B啊,我要给你发消息了,你把公钥给我吧,我用你的<公钥加密对称密钥>,
   然后发给你,你用私钥解开它啊,然后我再用这把<对称密钥加密消息>发给你
   (很不幸,这段没有经过加密的话被C获取了,C嘿嘿一笑,等下B发公钥过来,我就截下来,然后我再把我的公钥发给A)
B:我这就把公钥给你啊
   (B果然把公钥过来了,C把B的公钥截取,嘿嘿一笑,把自己的公钥发给了A)
A:用B的公钥(其实是C的了)加密对称密钥,发给B
    (这个时候C终于获得了对称密钥,但是并没有得意忘形,他还是谨慎地把A发过来的消息用B的公钥加密并发给了B
B:收到了A的消息(其实是C的),并用自己的私钥打开,给A回信说收到了,甚至还用对称密钥加密
A:收到了B发来的用对称密钥加密的消息,开始用对称密钥加密私密消息发给B
    (A,B都深信不疑,但是其实这个时候拥有对称密钥的人有三个,A,B,C)
因此接下来A和B的对话都被C知道了...

混合加密的方式看起来万无一失,但是还是出了问题,那么问题的根源在哪呢???
从上面的过程可以看到,问题就在于C把自己的公钥发给A,A并没有认出来,还深信不疑这就是B的公钥…那么怎么解决这个问题呢?
这个时候就需要第三方机构数字证书认证机构了,它能够向A证明,这个证书就是B的,而不是其它人的,那么如何实现呢?可以参考以下过程:
下面把<数字证书认证机构>称为D
1. B把自己的公钥交给D
2. D用自己的<私钥>对<B的公钥>进行签名并颁发公钥证书,以后B向其他人发送<公钥时连同证书>一起发送,以达到证明身份的目的。而<D的公钥>广泛存在于<客户端浏览器>中
3. A向B发出请求
4. B把自己的<公钥连同证书>发给A
5. A的浏览器收到B的<公钥和证书>,浏览器用<D的公钥>对<B的公钥和证书>进行验证,以达到验证B的身份的目的
A确定B的身份之后,就可以像上面那段对话那样与B进行交流啦

但是到目前为止,还是存在问题,C虽然不能看到AB之间发送的消息,也不能伪装成AB发送消息,但是它还是可以把AB的消息截取下来,进行胡乱篡改,达到干扰交流的目的啊…


HTTPS防止消息被恶意篡改的方式:

但是并不用担心,在发送消息的过程中,应用层发送数据时可以附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保证报文的完整性
至此HTTP的三个缺点就都得到了解决,本博客参考自《图解HTTP》一书


觉得有问题的地方欢迎在评论区指出呀,觉得不错不妨点个赞…本人正在准备春招,因此近期会写不少面试题总结,有一起的可以互相关注,一起加油~

发布了22 篇原创文章 · 获赞 17 · 访问量 8668

猜你喜欢

转载自blog.csdn.net/Sun_Dean/article/details/104113831