SSL 如何免受流氓證書頒發機構的影響?
關於 SSL,我從來沒有完全理解過一件事(這可能意味著我根本不理解 SSL):SSL 如何免受流氓證書頒發機構的影響?
這可能最好作為一個例子來闡述:
假設公司 B 從證書頒發機構 A 購買了證書 C。
現在,通常我會去網站,B 的伺服器向我顯示證書 C,我看到它是由 A 簽名的,我信任 A 的根證書,一切都是花花公子,然後我去向惡意公豬扔憤怒的鳥。
但是假設,無論出於何種原因,某人 M 說服/欺騙不同的證書頒發機構 N 向他們頒發證書 Q,該證書看起來像證書 C,但不是。
現在,如果 M 對我做了一些中間人,我的理解是 M 的伺服器向我顯示 Q,我看到 Q 由 N 簽名,我信任 N 的根證書,一切都是花花公子……除了這不是因為 M 可以查看我所有的明文,並且可以按照他的意願隨意處理,包括 MITM 的另一半(如果他願意),將資訊傳遞給 B,等等。
(我知道這是一個帶有 SSL 扭曲的經典 MITM,但我只是想非常清楚我的邏輯,以防萬一我錯過了一些相關的東西。)
我猜還有其他一些保護措施可以減輕這種情況,我猜?我希望?…請?
僅當客戶端可以確保它認為是伺服器的公鑰確實是真正的伺服器公鑰時,SSL 才能提供針對中間人的保護。X.509 證書旨在提供此資訊,但這是相對的,沒有涉及流氓 CA。“流氓 CA”在這裡是以下之一:
- 一個邪惡或容易上當的根 CA(“顛覆”CA 可能是一個更中性的術語)。
- 一個邪惡或易受騙的中間CA,其自己的證書由另一個 CA 頒發(上升到受信任的根)。
事實上,流氓 CA 超出了 X.509 的範圍。這是一個奇怪的斷言,但它的意思是 X.509 對損害遏制起作用:
- 如果發生事故,撤銷用於及時限制損害。
- 儘管在技術上沒有什麼能阻止流氓 CA 頒發假證書,但它會留下痕跡;即,假證書指向流氓 CA,因為它確實是流氓。害怕報復應該讓 CA 保持誠實和穩健。
儘管基本的作業系統或 Web 瀏覽器預設傾向於信任大約 100 個根 CA,並且這種信任受到所有這些 CA 中最弱的限制,但碰巧涉及被破壞的 CA 的“事故”很少見,大約只有一次一年左右。這意味著該系統在實踐中有效。您對問題的理解是正確的,但經驗表明,現有的緩解措施(來自法律/警察部隊的報復,以及撤銷和作業系統/瀏覽器更新檔)使攻擊者的攻擊“不值得”(它不會工作時間長,而且有風險),這就解釋了為什麼此類攻擊仍然很少見。我敢說 X.509不是SSL 驅動的網站中最薄弱的環節(SSL 也不是最薄弱的環節;網站是常見的問題)。
您提出的方案在過去發生過,但並不表示 SSL 失敗,而是您“選擇”信任的 CA 失敗。
根據定義,您應該相信“受信任的根證書頒發機構”儲存中的所有 CA 擁有良好的證書實踐聲明 (CPS) 並遵守它。您應該感到放心,他們不會在未對請求者確實擁有他們為其請求證書的域進行一定程度的檢查之前不會頒發證書。
如果惡意證書是由 CA 頒發的,那麼 CA 是不可信的,您將其包含在您的可信儲存中是錯誤的。
實際上,很少有人選擇他們信任的證書頒發機構——他們接受作業系統或瀏覽器製造商選擇包含在商店中的 CA。他們相信微軟(或任何人)已經代表他們完成了相關檢查。
如果您偏執,有各種瀏覽器外掛會在證書頒發者在訪問站點之間發生變化時發出警告。