1.客戶端發(fā)起https請求
2.服務端響應一個證書(包含服務器信息,公鑰,數(shù)字簽名---證書頒發(fā)機構,證書的指紋(證書頒發(fā)機構自己用私鑰加密的)和指紋算法等)
3.客戶端驗證證書是否安全.判斷內容
(1)判斷頒發(fā)機構是否為操作系統(tǒng)所信任的(一般在本地) --------操作系統(tǒng)會默認一些頒發(fā)機構是安全的
(2)利用操作系統(tǒng)所信任的頒發(fā)機構的證書 (這里的證書是頒發(fā)機構自己用的) 中的公鑰,去解密上述證書的加密的指紋得到指紋hash摘要
(3)利用上述指紋算法算出指紋hash摘要,從而對比兩個hash摘要是否相同,從而保證證書數(shù)據(jù)沒有被篡改過
4.如果第3步都驗證通過說明該證書是可信的
5.檢驗服務器響應證書的公鑰,是否為服務器所發(fā)
6.給服務器發(fā)送隨機字符串,服務器用私鑰加密隨機字符串并做hash摘要響應給客戶端,客戶端用公鑰解密得到hash摘要并和自己生成的hash值對比是否一致,從而判斷對方是否為服務器
7.如果第6步通過,說明服務端確實擁有正確的私鑰,客戶端就可以用這個公鑰加密一個對稱加密的密鑰(簡稱對稱密鑰)然后發(fā)送給服務端
8.服務端用私鑰解密這個加密的對稱密鑰,以后雙方便用這個對稱密鑰加密進行通信。
上述存在的疑問的個人見解
(2)利用操作系統(tǒng)所信任的頒發(fā)機構的證書 (這里的證書是頒發(fā)機構自己用的) 中的公鑰,去解密上述證書的加密的指紋得到指紋hash摘要
這一步的指紋hash摘要的意義是什么?不做hash摘要會不會有影響?
答:因為證書中的(公鑰)對應了一個私鑰,而這個私鑰只有證書機構才擁有。
不做hash的情況,黑客只要篡改證書信息,很難模擬對應的私鑰加密生成的指紋,而該指紋如果不做hash摘要,那么我們驗證也不做hash摘要保持一致就可以了。所以可以不是必須的。
這里做hash的意義,可以減小數(shù)據(jù)長度,加快到時對方用公鑰解密速度,優(yōu)化性能。
第6步同理,hash可以優(yōu)化性能,且此處這樣使用可以讓黑客更難找出加密規(guī)律(因為是主動探查服務端有沒有私鑰)。