什麼是加密 SNI?| ESNI 如何運作

加密的伺服器名稱指示 (ESNI) 有助於保護使用者瀏覽的私密性。這是透過對 TLS 交握中以前未加密的部分進行加密來實現的,該部分可以顯示使用者正在存取哪個網站。

學習目標

閱讀本文後,您將能夠:

  • 瞭解為什麼 ESNI 對於保護隱私性和安全性必不可少
  • 瞭解 ESNI 如何使用公開金鑰加密和 DNS 記錄進行運作
  • 探索可用于實現安全 Web 瀏覽的其他注重隱私的通訊協定

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是加密 SNI (ESNI)?

加密的伺服器名稱指示 (ESNI) 是保護使用者瀏覽資料的私密性的一項重要功能。它確保正在偵聽的第三方無法監視 TLS 交握流程並以此確定使用者正在存取哪些網站。顧名思義,ESNI 透過加密 TLS 交握的伺服器名稱指示 (SNI) 部分來實現其目的。

SNI 告訴 Web 伺服器在用戶端與伺服器之間的連線開始時顯示哪個 TLS 憑證。SNI 是 TLS 通訊協定的補充,它使伺服器可以在同一 IP 位址上託管多個 TLS 憑證。

可以將 SNI 視為郵寄地址的公寓號碼:一棟大樓中有多間公寓,因此每間公寓都需要一個不同的編號來加以區分。類似地,雖然伺服器由 IP 位址標示,但是用戶端裝置需要在其傳送給伺服器的第一條訊息中包括 SNI,以表明其試圖存取哪個網站(哪間公寓)。

什麼是 TLS?

Transport Layer Security(簡稱 TLS)是一種加密通訊協定,可確保網際網路通訊的私密性和安全性。TLS 主要用於加密應用程式和 Web 伺服器之間的通訊,例如在 Web 瀏覽器載入網站時。所有使用 TLS 的網站都必須具有 TLS 憑證。TLS 有時稱為 SSL,但 SSL 是該通訊協定的過時名稱。

所有 TLS 連線均以「交握」開始。就像現實生活中兩個人見面,自我介紹時會握手一樣,TLS 交握是用戶端裝置(例如使用者的智慧型手機)與 Web 應用程式或網站之間的一系列介紹性通訊。在 TLS 交握期間,兩個通訊裝置就使用的加密金鑰以及其他步驟達成協定。儘管涉及許多步驟,但 TLS 交握僅花費幾毫秒的時間。

伺服器名稱指示 (SNI) 如何運作?

SNI 是 TLS 交握第一步中微小卻重要的組成部分。TLS 交握中的第一條訊息稱為「client hello」。作為此訊息的一部分,用戶端要求查看 Web 伺服器的 TLS 憑證。伺服器回覆時將傳送憑證。

問題是,許多 Web 伺服器會代管一個以上的網站,並且可能每個網站都有自己的 TLS 憑證。如果伺服器向用戶端顯示錯誤的憑證,用戶端將無法安全連接到所需網站,從而導致出現「您的連線非私密」錯誤

SNI 透過標示用戶端正在嘗試存取哪個網站來解決此問題。矛盾的是,只有在使用 SNI 成功完成 TLS 交握後,才能進行加密。結果,由於 client hello 訊息是在 TLS 交握開始時傳送的,普通 SNI 不會被加密。任何監視用戶端和伺服器之間連線的攻擊者都可以讀取交握的 SNI 部分,以此確定用戶端正在與哪個網站建立連線,即便攻擊者無法解密所有進一步通訊。(攻擊者可以透過多種方式使用此資訊,例如,建立一個網路釣魚網站來欺騙使用者。)

加密 SNI 如何運作?

ESNI 透過加密 client hello 訊息的 SNI 部分(僅此部分),來保護 SNI 的私密性。加密僅在通訊雙方(在此情況下為用戶端和伺服器)都有用於加密和解密資訊的金鑰時才起作用,就像兩個人只有在都有儲物櫃鑰匙時才能使用同一儲物櫃一樣。由於 client hello 訊息是在用戶端和伺服器交涉 TLS 加密金鑰之前傳送的,因此 ESNI 加密金鑰必須以其他方式進行傳輸。

解決方案:公開金鑰加密。Web 伺服器在其 DNS 記錄中新增一個公開金鑰,這樣,當用戶端查找正確的伺服器位址時,同時能找到該伺服器的公開金鑰。這有點像將房門鑰匙放在屋外的密碼箱中,以便訪客可以安全地進入房屋。然後,用戶端即可使用公開金鑰來加密 SNI 記錄,以便只有特定的伺服器才能解密它。(這是簡單說明;有關詳細的技術說明,請參閱此部落格文章。)

假設 Alice 想存取 Bob 的網站 www.bobisawesome.example.com。就像每個負責任的網站擁有者一樣,Bob 在他的網站上使用 TLS,以便對進出他網站的所有流量進行加密。Bob 還實作了 ESNI 以進一步保護像 Alice 這樣的網站訪客。

當 Alice 在筆記型電腦的瀏覽器中輸入 https://www.bobisawesome.example.com 時,她的筆記型電腦會透過以下過程來載入網站:

  1. 她的筆記型電腦向 DNS 伺服器傳送查詢以查找網站的 IP 位址。
  2. DNS 回應告訴 Alice 的筆記型電腦使用哪個 IP 位址來查找 Bob 的網站,DNS 回應還包括 Bob 的 ESNI 公開金鑰。
  3. Alice 的筆記型電腦將 client hello 訊息傳送到指定的 IP 位址,使用 Bob 的公開金鑰對訊息的 SNI 部分進行加密。
  4. Bob 的 Web 伺服器會顯示 Bob 的 TLS 憑證。
  5. TLS 交握繼續,Alice 的筆記型電腦載入 www.bobisawesome.example.com。任何可能正在監視網路的攻擊者都無法看到 Alice 正在瀏覽哪個網站。*

*僅當流程的 DNS 部分使用 DNSSEC 以及 DNS over HTTPS 或 DNS over TLS 時,最後一句話才為真。更多資訊見下方。

僅使用 ESNI 可以保證 Web 瀏覽的私密性嗎?

ESNI 是保護網路隱私和安全性的重要步驟,但其他新通訊協定和功能也很重要。網際網路在設計時並未考慮安全性和隱私性,因此,在造訪網站的過程中有很多步驟都是非私密的。但是,各種新通訊協定都有助於對每個步驟進行加密和保護,使之免受惡意攻擊者的攻擊。

Domain Name System (DNS) 將人類可讀的網站位址(如 www.bobisawesome.example.com)與字母數位 IP 位址進行匹配。這就像在所有人都使用的大型地址簿中查找某人的地址一樣。但是,一般 DNS 未加密,這意味著任何人都可以看到某人正在查找哪個地址,並且任何人都可以偽裝成地址簿。即使安裝了 ESNI,攻擊者仍然可以查看使用者正在查詢的 DNS 記錄,並確定他們正在造訪哪些網站。

有三個其他通訊協定旨在縮小這些差距:DNS over TLS、DNS over HTTPS 和 DNSSEC

DNS over TLS 和 DNS over HTTPS 都做同樣的事情:使用 TLS 加密來加密 DNS 查詢。它們之間的主要區別在於它們使用的網路層和它們使用的網路連接埠。DNSSEC 驗證 DNS 記錄是真實的並且來自合法的 DNS 伺服器,而不是來自冒充 DNS 伺服器的攻擊者(如 DNS 快取記憶體中毒攻擊)。

什麼是加密 Client Hello (ECH)?

加密 Client Hello (ECH) 是 TLS 通訊協定的另一個延伸,可透過加密來保護 Client Hello 的 SNI 部分。但是,與 ESNI 不同,ECH 會加密整個 Client Hello。請參閱 此部落格文章,進一步瞭解 ECH。

Cloudflare 是否支援 ESNI?

Cloudflare 網路自 2018 年 9 月以來一直支援 ESNI。Cloudflare 不僅是第一個支援 ESNI 的主要網路,而且 Cloudflare 在開發 ESNI 方面也發揮了重要作用。ESNI 尚未作為官方 RFC 或網際網路標準發布,但 RFC 草案正在製定中。

使用這個免費的 ESNI 檢查工具檢查瀏覽器的安全性、隱私和 ESNI 使用情況。深入瞭解建立 SNI 的原因TLS 交握如何運作