HTTPS的四次握手
- 客戶端: 你好,我要發起一個 HTTPS 請求,請給我公鑰
- 服務器: 好的,這是我的證書,里面有公鑰
- 客戶端: 解密成功以后告訴服務器: 這是我的隨機對稱秘鑰 (用公鑰加密后的) 。
- 服務器: 好的,我知道你的秘鑰了,后續就用它傳輸。
證書是怎樣驗證的?怎樣保證中間人不能偽造證書?
- 在服務器端發送證書后,瀏覽器根據預先安裝的權威機構的公鑰驗證證書的有效性,如果有效則使用證書的公鑰加密一個隨機生成的對稱密鑰用于后續的通信。
- 客戶端的瀏覽器和內置操作系統內部都有一個權威機構所頒發的根證書列表,這些列表中有能夠解密私鑰的鑰匙(這個鑰匙和給隨機生成的
對稱密鑰
加密的公鑰
是不同的) - 客戶端發起https請求后,服務器把證書(證書內容和公鑰,這個公鑰于之前的鑰匙是不同的,這個公鑰匙加密對稱密鑰的,這些事明文傳輸)和證書的哈希值(哈希值經過服務器私鑰加密)發送給客戶端,由于傳送過程中經過私鑰加密的哈希值不能被修改(修改以后經過客戶端鑰匙解釋出來的是亂碼),所以如果證書內容被修改,那么就會和傳送過來的證書哈希值不匹配,所以可以知道證書被篡改和偽造的了。
瀏覽器里面的鑰匙(公鑰)、證書里面的公鑰、服務器私鑰、隨機的對稱密鑰,都是什么?
- 瀏覽器里面的鑰匙(CA的公鑰):作用是驗證證書
- 證書里面的公鑰:對稱加密過程,給對稱密鑰加密,然后傳送到服務器
- 對稱密鑰:客戶端隨機生成的,用于客戶端與服務器的后續通信
- 服務器私鑰:解密客戶端發來的用公鑰加密的對稱密鑰