握手階段分4次通訊:算法
第一次:ClientHello瀏覽器
客戶端向服務端發出加密通訊的請求,請求裏面包含:服務器
一、加密協議的版本。編碼
二、client生成的隨機數加密
三、支持的加密算法好比:RSA公鑰加密server
四、client支持的壓縮算法hash
第二次:ServerHellocli
服務端向客戶端響應,並返回如下信息:隨機數
一、服務端確認的加密版本,若是服務端支持的TSL加密版本和客戶端不一致, 那麼轉回到不加密的通訊。請求
二、server生成的隨機數。
三、server發給客戶端的證書(證書裏面包含公鑰和數字簽名、加密算法、簽名機構、過時時間)、網址
第三次:
一、客戶端驗證服務端的證書有沒有過時,網址信息是否是客戶端要請求的。瀏覽器從服務器拿到證書。證書上有服務器的公鑰和CA機構打上的數字簽名。拿到證書後「驗證」其數字簽名。具體就是,根據證書上寫的CA簽發機構,在瀏覽器內置的「根證書」裏找到這個機構對應的「公鑰」,用此「公鑰」解開數字簽名,獲得摘要(digest,證書內容的hash值),據此驗證證書的合法性。若是驗證沒有經過,那麼會有顯示的警告。
二、若是用戶確認了或者這些都校驗經過了。那麼客戶端再生成一個隨機數叫作「pre market key」,該隨機數用公鑰加密返回給服務端。
三、編碼改變通知。
第四次:
一、這樣服務端就有了3個隨機數,服務端用這個3個隨機數生成會話密鑰。
二、而後用這個密鑰給內容加密。同時用私鑰給會話密鑰加密,返回給客戶端。
三、發送編碼改變通知,通知客戶端之後就用會話密鑰加密內容。