网站安装SSL证书后,建立连接的过程会发生变化,安全性会大大提高。其原理是使用非对称加密传输会话密钥,然后使用会话密钥对客户端和服务器之间传输的数据进行加密。问题来了,为什么不直接用公钥加密数据,而是先用公钥加密会话密钥,再用会话密钥加密数据呢?岂不是多余。我们先来看看网站安装SSL证书后,客户端与服务器端建立连接的过程。客户端提交HTTPS请求,服务器响应请求,将证书公钥发送给客户端。客户端验证证书公钥的合法性后,生成会话密钥,用SSL证书的公钥加密会话密钥,发送给客户端。服务器收到加密数据后,用私钥解密,得到会话密钥。客户端和服务器使用会话密钥加密要传输的数据并进行通信。当客户端成功验证了SSL证书公钥的合法性后,就可以直接用公钥加密数据,与服务器端传输数据。为什么需要很多额外的步骤?其实这主要是为了解决速度太慢的问题。RSA公钥算法的签名算法和验证算法需要时间,每秒可以完成的计算量如下:我们以RSA2048为例。普通计算机完成一次签名操作需要4.097毫秒,这意味着加密可以在一秒内完成。即244.1*2048=499916.8bit/second=499.917kbps。如此缓慢的速度对于用户来说肯定是无法接受的。非对称加密虽然安全性高,但速度慢是致命的缺点。对称加密正好相反。虽然治安很差,但上门率很高。SSL证书的智慧就在这里。首先,利用非对称加密的高安全性来传输AES对称加密密钥。服务器解密后,通信双方将得到一个会话密钥。因为这个会话密钥是通过非对称算法RSA加密的,所以不会被第三方监听或者窃取是安全的。之后丢弃难度较大的非对称加密,直接使用对称加密算法进行通信。我们可以举一个更容易理解的例子。A和B在两个不同的地方。他们要给对方运送贵重物品,运送过程中必须保证物品的安全。他们现在有两种交通方式可以选择,一种是飞机,一种是卡车。A和B所在的地方很奇怪。陆运公司会配备专门的安保人员,而空运没有,所以经常发生劫机事件,陆运相对安全。无奈之下,A和B只能选择陆路运输,但是时间一长,他们发现这样做的效率太低了。经过调查发现,只要按照具体路线走,就不会发生劫持事件。于是,B想了个好办法,利用陆路交通工具,把路线图送到A手里。A知道路线后,双方将使用空运,既保证速度又保证安全,一举两得。另一方面,不使用公钥直接加密数据也是出于安全考虑。如果直接使用公钥加密,一旦得到服务器私钥,所有通信内容都会被解密,极不安全。如果用公钥加密会话密钥,即使得到私钥,第三人也无法解密数据,因为通信内容是用会话密钥加密的。
