密钥的协商、交换
上一节中,我们已经能保证客户端的确是和可信的服务器进行交互了,在保证服务器可信的基础上,接下去,我们要让客户端和服务器之间共享一个密钥,该密钥用来加密后续的会话。
密钥协商和交换是SSL的一个关键,也是SSL性能消耗大的地方,而需要消耗如此高性能的直接原因就是,客户端和服务器希望安全的交换或者协商出一个密钥。
那么客户端和服务器之间怎么安全的共享一个密钥而又不让其他人知道呢?一种方法是:服务器或者客户端把自己的密码拷贝到CD中寄给对方?不过显然不现实。这存在2种潜在的问题。首先,无法确定是否有快递员读取了密钥,然后客户端和服务器之间的对话都被快递员知晓了,毕竟光盘上的数据谁都可以读。其次,难道每次一个客户端想和服务器建立连接,都要寄快递?显然成本有点高。可能你想说“拿我和服务器只要寄一次密钥就行了,后续的会话都用这个密钥”,如果这样,当密钥泄露的时候,你和服务器之间的对话都被人看光了自己却浑然不知。
所以,关于密钥交换和协商,我们可以总结出如下几点:
1:密钥使用周期必须是短暂的,不能长期有效,最好一个会话一个密钥。
2:密钥不能明文的传输于网络,否则如果被别人看到,那么谁都能解密你们的会话了。
然而,这出现了一个矛盾:交换密钥是为了加密传输,然而密钥自身又不能明文传输而需要被加密。死循环了。
这时候“非对称加密”就派上用场了,回顾一下非对称加密的特点:私钥加密的数据,只用公钥能解密;公钥加密的数据,只用私钥能解密。
那么,我们令服务器拥有私钥和公钥,然后对于每一个想建立安全连接的客户端,服务器把自己公钥明文的发给客户端,客户端接着生成一个密钥,然后拿公钥加密这个密钥,注意,这个加密的结果,只有私钥能解密,而私钥只有服务器有,也就是说,这个被非对称加密的密钥只能由服务器解密。这就完成了密钥的交换。其安全性是基于非对称加密的,私钥是服务器保存的,公钥一般放在证书中。密钥交换的流程如下图所示:
关于 SSL协议中,各密钥交换算法总结见我的博客
http://blog.csdn.net/mrpre/article/details/78025940
---------------------
作者:Mrpre
来源:CSDN
原文:https://blog.csdn.net/mrpre/article/details/77866961
版权声明:本文为博主原创文章,转载请附上博文链接!