在网络上进行传输数据的时候,通常要进行加密,如果不加密的话,就相当于在网络上裸奔,所有的请求和返回的信息都会被查到。
加密算法分为对称加密和非对称加密
对称加密
就是加密和解密的密钥是相等的,这种加密解密的速度很快,但是如果在传输密钥的过程中,密钥被人截获,就相当于没有进行加密。
非对称加密
通常是加密密钥和解密密钥是不相等的,这种比较安全,但是有个很大的缺点,就是速度比较慢,不适合传输比较大的数据。
所以由此,我们可以想一下,如果用非对称加密的方式,将一个对称密钥进行加密传输,接收方和发送方在真正进行传输的时候,使用这个对称密钥进行传输,既保证了安全,也提高了速度。
可是,如果有一个中间人截获了这个公钥,而把自己的公钥传给发送方,然后用自己的私钥解密,来进行读取信息,这样还是没能起到安全传输的结果。
这里借用一张图
所以说到底,这个关键就是保证发送方公钥的准确传输,以及不被篡改。
所以为了防止这种情况,我们就要保证传输的发送方的公钥是正确的,这里我们采用,一个有公信力的认证组织CA来进行验证,确保传输的公钥是正确的。
上面的过程在网络中,可以将发送方可以看成服务器,将接收方可以看成是浏览器。
- 1.在发送方浏览器发起了一个https请求之后。dns解析,服务器响应了之后。
- 2.首先服务器将自己信息和公钥进行hash算法,生成一个消息摘要,在将这个消息摘要使用被CA认证过的私钥进行加密,生成数字签名,将这个数字签名和信息摘要一起作为一个数字证书进行传输,传输给接收方。
- 3.浏览器接受了之后,将这个数字签名用CA的公钥进行解密,这个公钥如何获取?(通常在浏览器上会有预置的CA列表),如果解密的结果和信息摘要相同,就说明传输的信息没有被篡改,如果不一样就被篡改了,hash算法由于其的特点,如果内容有一点点的改变,生成的结果都会不一样。
- 4.验证成功后,浏览器得到了服务器的公钥,浏览器随机生成一个对称密钥,使用服务器的公钥进行加密,传输到服务器。服务器收到之后,用自己私钥进行解密,现在两方都得到了一个对称密钥,可以进行传输了。
在这个过程中,数字证书起到的作用就是,放置信息被篡改。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
学习资料:
http://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513779&idx=1&sn=a1de58690ad4f95111e013254a026ca2&chksm=80d67b70b7a1f26697fa1626b3e9830dbdf4857d7a9528d22662f2e43af149265c4fd1b60024&mpshare=1&scene=23&srcid=10243ET3Hu0Nl8xDvj9hFp9U#rd