
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是由攻擊者改過的消息得出的,這樣檢查了就知道不匹配。因客戶端與服務器給出的隨機數是密鑰產生過程的輸入,所以握手不會被重放攻擊影響。這些消息是第一個新的加密算法與密鑰加密的。
因此,在該過程完成時,客戶端與服務器已和加密算法達成一致,並有了一組與那些算法一起用的密鑰。更重要的是,它們可確信攻擊者未乾擾握手過程,因此磁商過程反映了雙方的真實意圖。
