SSL中第一复杂、重要的部分是握手协议。此协议是为了建立会话,协商加密、鉴别、压缩方法与初始化操作,使服务器和客户可鉴别对方身份、协商加密和MAC算法及保护在SSL记录中发数据的加密密钥。在传所有应用数据前都得用握手协议。
SSL握手协议流程中数据处理过程如下:
①客户端把它支持的算法列表和一个密钥产生过程用来输入的随机数发给服务器。
②服务器根据列表内容选一种加密算法,并把它和含服务器公用密钥的证书发给客户端。该证书还有用来认证的服务器标识,服务器还给出了作为密钥产生过程部分输入的随机数。
③客户端验证服务器的证书,并抽取服务器的公钥。然后,再产生一个pre_master_secret的随机密码串,且用服务器的公钥对它加密。最后,客户端把加密后的信息发给服务器。
④客户端与服务器端由pre_master_secret及客户端与服务器端交换的随机数值,独立计算出加密和MAC密钥。
⑤客户端把握手消息的MAC值发给服务器。
⑥服务器把握手消息的MAC值发给客户端。
第①步与第②步的目标是与一组算法达成一致。客户端告知服务器它支持的算法,而服务器选其中的一种。当客户端收到服务器在第②步发的消息时,它也会知道此种算法,因此双方在之后的通信中知道要用的协议版本和算法。
第②步和第③步的目标是确定一组加密算法。第②步服务器向客户端给出证书,就能让客户端给服务器传密码。通过第③步后,客户端与服务器端都了解了pre_master_secret。客户端了解pre_master_secret是由于是它产生的,而服务器则是经过解密得到pre_master_secret的。第③步是握手过程的核心步骤,要保护的数据都靠pre_master_secret的安全。客户端用服务器的公钥加密共享密钥,而服务器用其私钥解密共享密钥。剩余步骤主要为确保交换过程的安全。
第④步中,客户端与服务器分别借一样的密钥导出函数得到master_secret,最后再由KDF用master_secret产生加密密钥。
第⑤步与第⑥步为避免握手遭受篡改。客户端给出多种算法的情况非常常见,一些强度弱而某些强。攻击者可删除客户端在第①步给出的高强度算法,迫使服务器选一种弱强度的。第⑤步与第⑥步的MAC交换就可阻止此攻击,由于客户端的MAC是由原始消息计算的,而服务器的MAC是由攻击者改过的消息得出的,这样检查了就知道不匹配。因客户端与服务器给出的随机数是密钥产生过程的输入,所以握手不会被重放攻击影响。这些消息是第一个新的加密算法与密钥加密的。
因此,在该过程完成时,客户端与服务器已和加密算法达成一致,并有了一组与那些算法一起用的密钥。更重要的是,它们可确信攻击者未干扰握手过程,因此磁商过程反映了双方的真实意图。