公开密钥和共享密钥的联合使用
在上一篇知道,公开密钥主要是接收方一发拥有私钥,共享了公钥,但是如果只用公开密钥进行通信那么真实的速度是很慢的,(因为公钥同样可能被伪造,所以公钥也需要认证,如果每次都认证,那么就会减慢总体流程)。虽然共享密钥可以解决传播慢的问题,但是共享密钥有一个致命的缺点,那就是难以把共享的密钥在可能被拦截修改的情况下传送给对方。于是就有了两种方式结合的办法。
首先使用公开密钥的方式,服务器生成两把密钥,分别是公钥和私钥,公钥如果直接发送很容易被截取篡改,所以服务器把生成的公钥拿去请求CA(数字认证机构),CA先判断服务器是否是伪造假冒的,如果不是,那么就拿到请求的公钥。拿到公钥后使用自己的私钥给其添加自身的数字签名并将其放到数字证书中,返回给服务器,服务器再将数组证书发送给客户端,客户端浏览器一般在发布的之后就会先拿到CA指定的公钥,用此公钥检验服务器的公钥的真假。若为真,那么客户端就获取了服务器的真实公钥。这时客户端生成共享密钥,并且将其作为一个正常的文件,使用公钥加工,发送给服务器,服务器接收到后使用私钥解密获取共享密钥,此后所有的通信加密都基于这个共享密钥。这时即保证了双方在安全的情况下获取了公用的共享密钥,又使得后续通信效率大大增加。