證書驗證過程 :本地CA公鑰解證書里的數字簽名,用簽名里的指紋算法求哈希值與指紋比對。
簽名被篡改后沒有私鑰加密,公鑰解密這一步就會檢測出來。
1. 雙方通信內容的安全性是靠公鑰加密、私鑰解密來保證的,這一安全性由非對稱加密的特性,即由公鑰加密的信息只能使用對應的私鑰才能解開來保證。由于私鑰不會傳遞,只有擁有者知道,所以安全性就由公鑰的正確性來保證。
2. 公鑰由對方在通信初始所提供,但是這時很容易被中間人替換掉,為了保證公鑰的正確性,所以在發送公鑰的時候也會提供對應的數字證書,用于驗證這個公鑰是對方的而不是中間人的。那么安全性就是由數字證書的正確性來保證了。(證書以及其內的公鑰也有可能被中間人截獲)
3. 數字證書是由上級 CA 簽發給個人 / 組織的,上級 CA 用自己的私鑰給個人證書進行簽名,保證證書中的公鑰不被篡改,而接受者需要用上級 CA 證書中的公鑰來解密個人數字證書中的數字簽名來驗證證書中的公鑰是否是正確的。那么安全性就是由上級 CA 證書的正確性保證的了。
4. 但是,上級 CA 證書也是由其上級 CA 簽發的,這種信任關系一直到根證書。根證書沒有上級 CA 為其簽名,而是自簽名的,也就是說,它自身為自身簽名,保證正確性。所以根證書就是這個信任鏈最重要的部分。如果根證書泄露的話,其簽名的所有證書及使用其簽名的證書所簽名的證書的安全性將不復存在。現在,安全性就是靠系統根證書的私鑰不被泄露或者其公鑰不被篡改來保證的了。
5. 根證書不應該通過網絡分發,因為通過網絡分發的話,可能會被中間人攻擊。一般根證書都通過操作系統或者瀏覽器分發,在操作系統中會內置很多根證書,但是最初的操作系統也不能通過網絡分發,因為中間人可以修改操作系統中的根證書。所以要保證安全只能靠最原始的方法,當面交流。硬件廠商會和證書簽發機構合作,在電腦、手機等設備出廠的時候在其操作系統中內置簽發機構的根證書,再將這些設備分發出去,這樣,這些設備的用戶就可以安全地進行信息交換了。所以,安全性就依賴于這些設備在分發到消費者手中之前不會被惡意修改來保證了。
至此,整個信任鏈就建立起來了,只需要有一臺設備上安裝了可以信任的根證書,就可以用來分發更多安全的操作系統了。之后的所有信任鏈都是安全的了。
證書能鑒別偽裝的服務器,那能鑒別偽裝的客戶端嗎?
證書能鑒別偽裝的服務器,確切的說是公鑰可以鑒別是不是對應的服務器,因為他跟私鑰是配對的。而證書里的公鑰對不對,你把證書在信任鏈查一下就知道了,如果是對應域名的授信證書,那服務器一定是對的。
證書不能直接鑒別偽裝的客戶端,但我們有辦法,中間人是無法解客戶端的公鑰加密的,只需要在公鑰加密時生成一個對稱秘鑰發給服務器,服務器用這個秘鑰加密數據發送。中間人與客戶端都是使用公鑰,他是無從獲得此秘鑰的。