假設(shè)有一個攻擊者處于“瀏覽器”和“網(wǎng)站服務(wù)器”的通訊線路之間(比如公共WIFI)娱两,它的攻擊過程如下:
- 服務(wù)器向客戶端發(fā)送公鑰。
- 攻擊者截獲公鑰,保留在自己手上姨蝴。
- 然后攻擊者自己生成一個【偽造的】公鑰堕绩,發(fā)給客戶端策幼。
- 客戶端收到偽造的公鑰后,生成加密hash值發(fā)給服務(wù)器奴紧。
- 攻擊者獲得加密hash值特姐,用自己的私鑰解密獲得真秘鑰。
- 同時生成假的加密hash值黍氮,發(fā)給服務(wù)器唐含。
- 服務(wù)器用私鑰解密獲得假秘鑰。
上面問題的根源是因為“缺乏身份認證機制”沫浆,瀏覽器無法鑒別自己收到的密鑰是不是真的來自于網(wǎng)站服務(wù)器捷枯。
如何解決 SSL 的身份認證問題——CA 的引入:
由于雙方通常都是互不相識的,顯然不可能采用第一種方式件缸,而只能采用第二種公證人方式铜靶。
那么,誰來充當這個公證人他炊?這時候争剿,CA 就華麗地登場啦。
瀏覽器驗證網(wǎng)站發(fā)過來的證書痊末。如果發(fā)現(xiàn)其中有詐蚕苇,瀏覽器會提示“CA 證書安全警告”。
由于有了這一步凿叠,就大大降低了(注意:是“大大降低”涩笤,而不是“徹底消除”)前面提到的“中間人攻擊”的風險。
為啥瀏覽器能發(fā)現(xiàn) CA 證書是否有問題盒件?
因為正經(jīng)的 CA 證書蹬碧,都是來自某個權(quán)威的 CA。如果某個 CA 足夠權(quán)威炒刁,那么主流的操作系統(tǒng)(或瀏覽器)會內(nèi)置該 CA 的“根證書”恩沽。
(比如 Windows 中就內(nèi)置了幾十個權(quán)威 CA 的根證書)
因此,瀏覽器就可以利用系統(tǒng)內(nèi)置的根證書翔始,來判斷網(wǎng)站發(fā)過來的 CA 證書是不是某個 CA 頒發(fā)的罗心。