數位憑證(digital certificate)
公鑰只是一個數字,任何人都能產生一個並宣稱它屬於你的銀行。那你要怎麼信任某把公鑰真的屬於它說的對象?想想護照:它把你的照片和名字綁在一起,而你信任它,是因為一個你尊重的政府簽發並蓋了章。數位憑證就是公鑰的護照——一份把公鑰綁到某個身分(例如一個網域名稱)的文件,由一個受信任第三方的簽章來擔保。
具體來說,憑證是一個小小的資料檔,內含一個主體(例如網域 example.com)、那個主體的公鑰、一段有效期、簽發者的名字,以及——最關鍵的——一個憑證授權單位(CA)對以上全部的數位簽章。當你的瀏覽器透過 HTTPS 連到某網站時,伺服器會送出它的憑證。你的瀏覽器用 CA 的公鑰(它早已信任,因為它內建了一份受信任 CA 的清單)檢查 CA 的簽章、確認憑證未過期或被撤銷、並檢查憑證裡的網域是否與你請求的網站相符。若全部通過,瀏覽器就信任憑證裡的公鑰確實屬於那個網域。
為什麼重要:憑證正是擊敗中間人的關鍵。沒有它,攻擊者可以一邊把自己的公鑰交給你、一邊宣稱自己是你的銀行,而你會開心地把秘密直接加密送給攻擊者。憑證以密碼學把金鑰綁到名字上。最關鍵的誠實限制是:有效的憑證只證明你正在跟「控制那個網域名稱的人」說話——它完全不說明對方是否誠實、或內容是否安全。一個釣魚網站可以為它自己那個長得很像的網域,取得一張完全有效的憑證。鎖頭圖示的意思是「加密送往這個具名的伺服器」,而不是「這個網站值得信任」。
你造訪 https://example.com。伺服器出示一張憑證,內容是「公鑰 K 屬於 example.com」,由一個 CA 簽署。你的瀏覽器驗證 CA 的簽章、檢查名字相符、然後繼續——確信這把金鑰真的是 example.com 的。攻擊者沒有 CA 的私鑰就偽造不了這個。
公鑰的護照,由受信任的 CA 蓋章。
有效的憑證證明的是身分,不是誠實。它確認你正在跟具名的網域說話——但一個詐騙網站可以為它自己的詐騙網域持有一張完全有效的憑證。那個鎖頭不是「核可印章」。