HTTPS協議建立過程 1) 客戶端首次發送請求時,由於客戶端(瀏覽器等)對一些加解密演算法的支持程度不一樣,但是在TLS傳輸中必須使用相同的加解密演算法,所以在TLS握手的階段,客戶端告訴伺服器端自己支持的加密演算法(加密套件list),客戶端產生一個隨機數存在客戶端,並且傳送給伺服器,客戶端的隨機數要 ...
HTTPS協議建立過程
1) 客戶端首次發送請求時,由於客戶端(瀏覽器等)對一些加解密演算法的支持程度不一樣,但是在TLS傳輸中必須使用相同的加解密演算法,所以在TLS握手的階段,客戶端告訴伺服器端自己支持的加密演算法(加密套件list),客戶端產生一個隨機數存在客戶端,並且傳送給伺服器,客戶端的隨機數要和伺服器端的隨機數結合起來產生Master Secret(秘鑰)。
所以要返回的是:支持的協議版本,TLS1.0;客戶端生成的隨機數(1);支持的加密方式;支持的壓縮演算法。
2) 伺服器端在接受到客戶端的請求之後,要確定加密協議的版本,以及加密的演算法,然後也生成一個隨機數(2),以及將自己的證書一併發送給客戶端。
伺服器端要提供的信息:協議的版本;加密的演算法;隨機數(2),伺服器證書。
3) 客戶端再次響應,首先對證書進行驗證,驗證通過之後,客戶端會再次生成一個隨機數(3),使用證書中公鑰進行加密,並放一個(changeCipherSpec)編碼改變的消息,以及前面所以消息的hash值,進行伺服器驗證,然後用新秘鑰進行加密一段數據一併發送到伺服器端,確保通信前無誤。客戶端使用前面兩個隨機數以及剛剛生成的隨機素,使用與伺服器確定的加密演算法,生成一個session Secret。
註:changeCipherSpec是一個獨立的協議,體現在數據包中就是一個位元組的數據,用於告知伺服器端,客戶端已經切換到之間協商好的加密套件中,準備使用之前協商好的加密套件加密數據進行傳輸。
4) 伺服器再次響應,在接收到客戶端傳輸過來的第三個隨機數的加密之後的數據,使用私鑰對這段數據進行解密,對數據進行驗證,然後會跟客戶端使用相同的方式生成秘鑰。這時,伺服器給客戶端發送一個ChangeCipherSpec,告知客戶端已經切換到協商的加密套件狀態,準備使用加密套件和session secret加密數據,之後伺服器端會使用session secret加密一段Finish消息給客戶端,已驗證之前通過握手建立起來的加密通道是否成功。
5) 後續客戶端和伺服器之間的通信,確定好秘鑰之後,伺服器與客戶端之間的通信就會通過商議好的秘鑰進行加密,進行通信。
註:SSL協議在握手階段使用的是非對稱加密,在傳輸階段使用的對稱的加密。