网络通信HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

Posted 面试猿每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?相关的知识,希望对你有一定的参考价值。


在平常面试中,遇到HTTPS面试题的概率就跟早上开车上班堵车的概率一样大。我们上上一篇文章中提到的那位腾讯的哥们面头条的时候,就被问道了HTTPS的交互流程和加密方式,以及如何优化HTTPS通信。由于篇幅不宜内容过多,以便更容易理解消化知识点,今天我们就先来了解下HTTPS的交互流程和加密方式,优化篇将后续再更新,感兴趣的同学可以关注本号。




HTTPS的交互流程是什么样的?



要了解HTTPS,我们就必须得先了解HTTPS的工作流程。我们可以参考下图的流程,归纳出五个步骤:

 

       

【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

       

 

1、客户端发起https请求

客户端发起一个https请求,连接到服务器的443端口;

 

2、服务端返回证书

 

3、客户端验证证书的合法性

 

4、客户端生成随机密码

如果验证通过,或用户接受了不受信任的证书,浏览器就会生成一个随机的对称密钥(session key)并用公钥加密,让服务端用私钥解密,解密后就用这个对称密钥进行传输了,并且能够说明服务端确实是私钥的持有者。

 

5、生成对称加密算法

验证完服务端身份后,客户端生成一个对称加密的算法和对应密钥,以公钥加密之后发送给服务端。此时被黑客截获也没用,因为只有服务端的私钥才可以对其进行解密。之后客户端与服务端可以用这个对称加密算法来加密和解密通信内容了。

 

我们可以发现Https由http最初的三次握手,已经变成了七次握手。正所谓鱼和熊掌两者不可兼得,在保证安全连接的同时,必定会带来性能上的损耗。

 



为什么数据传输不能直接用对称加密?



相信你看完以上的流程,已经有一堆问题了。又是公钥、私钥,又是对称秘钥,为什么一个加密流程要搞的这么复杂呢?我们为什么不用对称加密直接加密呢?通常我们后端接口的通信不都是通过对称加密吗?

 

好了,假设我们使用对称加密,我们看看会出现什么问题。如果只是几个后端接口通信,通常服务提供方会私下向服务调用方提供一个秘钥,后端接口通过秘钥加密和解密传输数据。但如果是浏览器请求服务端时,我们的秘钥将会暴露在用户面前,如果服务端暴露给所有的用户都是同一个秘钥,一旦一个用户的秘钥被泄漏,将会严重影响到其他用户的数据传输的安全性。

       

【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

       

 

那我们能不能为每个客户端生成一个不同的秘钥呢?即使我们生产一个不同的秘钥,这个秘钥依然暴露出来了,只要有一个中间人拦截获取请求,就能获取到秘钥。

 



为什么数据传输不能直接用非对称加密呢?



既然对称加密走不通,那我们能不能用非对称加密来解决呢,比如RSA。我们知道,非对称加密会有一对秘钥,即公钥和私钥。通常私钥只保存在服务器端,公钥可以发送给所有的客户端,公钥加密的内容,只有私钥可以解开,私钥加密的内容,所有的公钥都可以解开。

【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

       

 

这种方式同样存在在传输公钥的过程中被中间人获取的风险,但相比对称加密分配不同秘钥给客户端的方式,非对称加密至少可以保证中间人是无法破解客户端通过公钥加密的内容,因为私钥只保存在服务器端,只有私钥可以破解公钥加密的内容。

 

既然中间人截取到公钥之后,拿到公钥也没有用,那中间人能否在拦截到服务端返回的信息之后,将这个真的公钥替换掉,传一个假的公钥给用户呢?答案是肯定的。

 

如下图所示,MITM即中间人(Man-in-the-MiddleAttack)可以拦截到服务端的真公钥,然后自己生成一对假的公钥和私钥,将假公钥传给客户端,客户端加密数据之后发送到服务端,中间又被中间人拦截,中间人用自己的私钥解密之后,即获取到了客户端发送的数据,然后中间人可以篡改请求的数据,使用真公钥进行加密,传回服务端。

 

【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

 

              



为什么需要 CA 认证机构颁发证书?



虽然非对称加密更接近解决数据加密传输的问题,但依然存在公钥被掉包之后,数据被篡改的风险。那我们能否在客户端做一个校验,保证浏览器接收到的公钥是合法的?这种思路是对的,但如果是我们自己来完成浏览器的这套验证,我们又如何把校验的信息传到浏览器上呢?不进行校验信息的加密传输,在传输过程中依然有泄漏的风险。如果进行加密,也存在以上同样的加密问题了。

 

于是业界专门成立了一个颁发证书的认证机构,通常服务提供者需要向认证机构申请证书,认证机构通过申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,生成的密文即是签名。同时,认证架构将会在操作系统或浏览器中内置CA的ROOT证书。浏览器安装后会内置一些权威第三方认证机构的公钥,比如VeriSign、Symantec以及GlobalSign等等。

 

       【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?      

当浏览器接收到服务端的数据时,首先会用散列函数计算公开的明文信息的信息摘要,然后采用浏览器内置的公钥对签名进行解密,解密出来的信息摘要与散列函数进行对比,如果一致则说明数据没有被篡改。

 

       

【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

       



为什么要有签名?



以上CA颁发证书时,会提供一个数字签名,那我们为什么需要这样一个数据签名呢?直接将服务端的公钥发送给第三方机构,使用私钥加密不就可以了吗?但是我们要知道,谁都可以去第三方机构申请证书的,而第三方机构都是使用的一对私钥和公钥。假设我们的中间人也去申请了,这个时候中间人可以截取到服务端的返回证书,然后更换为自己的,之后再发给客户端。而由于第三方也是合法的申请证书的人,所以客户端解密成功,利用中间人的公钥进行加密,之后发送到服务端时,中间人截取之后,利用自己的私钥解密获取到信息。

       

【网络通信】HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?

       

 

而通过数字签名,由于使用了域名等信息,只要浏览器发现不是当前域的,则认为是被篡改的,如果是当前域,解密之后发现签名不一样,也同样认为是被篡改的。



end




往期推荐





以上是关于网络通信HTTPS为什么要用到对称加密和非对称加密?相对于只使用非对称加密有什么好处?的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS为什么安全且性能好?

HTTPS协议

对称加密和非对称加密

从对称加密和非对称加密讲解HTTP到HTTPS的发展思路

对称加密和非对称加密

图文彻底搞懂非对称加密(公钥密钥)