1.ciphersuite
ciphersuite由三部分組成:金鑰交換演算法,對稱加密演算法,簽名演算法。這三個演算法組合而成乙個suite,金鑰交換演算法描述握手訊息中的keyexchange的相關細節,這裡交換的是pre-master,而對稱加密演算法描述金鑰交換演算法交換的內容細節的用法,簽名演算法的作用主要在認證。所以,雖然一般上ssl握手都是在client keyexchange中使用server的公鑰加密pre-master,然而這並不是唯一的做法,比如如果ciphersuite是tls_dh_rsa_with_des_cbc_sha的話,那就說明使用dh演算法交換金鑰,而是用rsa程序前面,摘要演算法是sha。注意,金鑰交換演算法和證書的型別沒有什麼關係,證書只是為了驗證對端的身份,和金鑰交換演算法屬於不同的業務範疇,它們之間的一點聯絡就是有的時候用伺服器證書裡面的內容就能使得客戶端將pre-master安全的傳輸給伺服器,比如rsa簽名的rsa公鑰的證書,從證書中就能取出伺服器的公鑰,於是客戶端就可以使用該公鈅來加密自己的pre-master,自己留乙份,傳給伺服器乙份,於是兩端都有了這個pre-master,然後就可以計算出相同的對稱金鑰了,如果是dh金鑰交換演算法,那麼也很簡單,雖然證書中可能沒有dh相關的資訊,但是伺服器端可以在server keyexchange訊息中包含dh的自己的份額,然後客戶端在client keyexchange中包含dh的自己的份額,然後兩端即可計算出相同的對稱金鑰了,不管怎樣總是能協商出乙個僅此兩端共享的對稱金鑰。證書用於認證,但是有時也能包含一些用於金鑰交換的資訊(比如rsa),ciphersuite中的keyexchangemethod用於金鑰交換,資訊可以和證書毫無關聯。
2.certificate verify訊息
該訊息的含義在於認證客戶端,由於伺服器端通常信任很多客戶端,如果a和b都是伺服器信任的,a要是拿著b的證書進行驗證就不好了,所以客戶端如果提供證書的話,那麼就要傳送這個訊息來證實自己就是證書的所有者。正如認證乙個人的身份不能只看他的證件是否有效,還要他按指印或者簽字是一樣的道理。那麼為何伺服器端不用傳送這個訊息來證實自己的身份呢?多個伺服器也是可以互相盜用證書的,以rsa金鑰交換演算法為例,答案就在於pre-master是用從伺服器證書取出的公鑰加密的,然後由客戶端發給伺服器的,如果伺服器證書不是自己的,那麼它將無法解密這個pre-master。不過要注意,有時候為了效率因素,有些情況下在ssl握手互動過程中是不驗證證書所有者的身份真實性的,這就可能招來中間人攻擊。
3.finished訊息
該訊息是ssl握手中的最後要互傳的訊息,包含乙個所有握手訊息的摘要值,這是為了防止中間人將強度較大的ciphersuite在client hello訊息中刪除,使得server不得不選擇強度較小的ciphersuite,然而這非client所願。問題是這個摘要不可以被中間人更改嗎?想象一下這時共享對稱金鑰已經協商好了,changecipherspec已經經過,所以這些訊息本身是加過密的。
4.所有細節詳情:參考rfc2246
SSL握手中的個別細節
1.ciphersuite ciphersuite由三部分組成 金鑰交換演算法,對稱加密演算法,簽名演算法。這三個演算法組合而成乙個suite,金鑰交換演算法描述握手訊息中的keyexchange的相關細節,這裡交換的是pre master,而對稱加密演算法描述金鑰交換演算法交換的內容細節的用法,簽...
SSL握手中的個別細節
1.ciphersuite ciphersuite由三部分組成 金鑰交換演算法,對稱加密演算法,簽名演算法。這三個演算法組合而成乙個suite,金鑰交換演算法描述握手訊息中的keyexchange的相關細節,這裡交換的是pre master,而對稱加密演算法描述金鑰交換演算法交換的內容細節的用法,簽...
SSL的握手協議
1.使用者瀏覽器將其ssl版本號 加密設定引數 與session有關的資料以及其它一些必要資訊傳送到伺服器。2.伺服器將其ssl版本號 加密設定引數 與session有關的資料以及其它一些必要資訊傳送給瀏覽器,同時發給瀏覽器的還有伺服器的證書。如果配置伺服器的ssl需要驗證使用者身份,還要發出請求要...