SSL握手過程

一、SSL握手有三個目的:
1. 客戶端與服務器需要就一組用於保護數據的算法達成一致;
2. 它們需要確立一組由那些算法所使用的加密密鑰;
3. 握手還可以選擇對客戶端進行認證。


二、SSL握手過程:
1. 客戶端將它所支持的算法列表和一個用作產生密鑰的隨機數發送給服務器;
2. 服務器從算法列表中選擇一種加密算法,並將它和一份包含服務器公用密鑰的證書發送給客戶端;該證書還包含了用於認證目的的服務器標識,服務器同時還提供了一個用作產生密鑰的隨機數;
3. 客戶端對服務器的證書進行驗證(有關驗證證書,可以參考數字簽名),並抽取服務器的公用密鑰;然後,再產生一個稱作pre_master_secret的隨機密碼串,並使用服務器的公用密鑰對其進行加密(參考非對稱加/解密),並將加密後的信息發送給服務器;
4. 客戶端與服務器端根據pre_master_secret以及客戶端與服務器的隨機數值獨立計算出加密和MAC密鑰(參考DH密鑰交換算法)。
5. 客戶端將所有握手消息的MAC值發送給服務器;
6. 服務器將所有握手消息的MAC值發送給客戶端。

 

    第5與第6步用以防止握手本身遭受篡改。設想一個攻擊者想要控制客戶端與服務器所使用的算法。客戶端提供多種算法的情況相當常見,某些強度弱而某些強度強,以便能夠與僅支持弱強度算法的服務器進行通信。攻擊者可以刪除客戶端在第1步所提供的所有高強度算法,於是就迫使服務器選擇一種弱強度的算法。第5步與第6步的MAC交換就能阻止這種攻擊,因爲客戶端的MAC是根據原始消息計算得出的,而服務器的MAC是根據攻擊者修改過的消息計算得出的,這樣經過檢查就會發現不匹配。由於客戶端與服務器所提供的隨機數爲密鑰產生過程的輸入,所以握手不會受到重放攻擊的影響。這些消息是首個在新的加密算法與密鑰下加密的消息。

    剛纔所描述的每一步都需要通過一條或多條握手消息來實現。在此先簡要地描述哪些消息與哪幾步相對應,然後詳細描述每條消息的內容。下圖描述了各條消息:

    第1步對應一條單一的握手消息,ClientHello.
    第2步對應一系列SSL握手消息,服務器發送的第一條消息爲ServerHello,其中包含了它所選擇的算法,接着再在Certificate消息中發送其證書。最後,服務器發送ServerHelloDone消息以表示這一握手階段的完成。需要ServerHelloDone的原因是一些更爲複雜的握手變種還要在Certifacate之後發送其他一些消息。當客戶端接收到ServerHelloDone消息時,它就知道不會再有其他類似的消息過來了,於是就可以繼續它這一方的握手。
    第3步對應ClientKeyExchange消息。
    第5與第6步對應Finished消息。該消息是第一條使用剛剛磋商過的算法加以保護的消息。爲了防止握手過程遭到篡改,該消息的內容是前一階段所有握手消息的MAC值。然而,由於Finished消息是以磋商好的算法加以保護的,所以也要與新磋商的MAC密鑰—起計算消息本身的MAc值。
    注意,上圖中省略了兩條ChangeCipherSpec消息。

一次SSL連接的完整過程:

 

 

 

 

SSL握手協議

SSL又叫“安全套接層(Secure Sockets Layer)協議”,是一種在客戶端和服務器端之間建立安全通道的協議。

SSL爲通信雙方提供了一種安全、可信、有效的通信方式。

SSL協議分爲密匙協商、數據通信兩個部分,其中密匙協商就是所說的握手協議。

形象的可以用下面這幅圖來說明。

ssl 

具體過程通過wireshark抓取ie6跟gmail的通信過程可以看出一二。

001

這是Client Hello內容:

 

 

這是server Hello的內容

 

服務器傳輸的證書


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/turui/archive/2008/01/25/2065349.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章