
你的瀏覽歷史有多 私密?
當您通過HTTPS訪問一個站點時,您希望沒有人監聽您和您的連接終止的位置之間的操作的。某種程度上來說,這是HTTPS能做到的。如果您訪問您的銀行網站,HTTPS可以有效地防止發送到或從該網站發送的內容(例如,您的用戶名和密碼或您的銀行帳戶余額)泄露給ISP或監視您網絡連接的任何人。
盡管發送到HTTPS站點或從HTTPS站點接收的內容是受到保護的,但是還有兩種方式可以很容易地觀察到您訪問過該站點。傳統上,其中一種是通過DNS。默認情況下,DNS查詢是不加密的,因此您的ISP或任何其他人都可以看到您要到達網絡上的哪個地方。Cloudflare 1.1.1.1——一個免費的(而且速度很快的)公共DNS解析器,支持DNS over TLS和DNS over HTTPS。
1.1.1.1已經取得了巨大的成功,我們顯著提高了通過加密連接發送DNS查詢的百分比。然而,批評人士正確地指出,你訪問的網站的身份仍可能以其他方式泄露。最有問題的是所謂的服務器名稱指示(SNI)擴展。
為什么使用SNI
從根本上說,SNI的存在是為了允許您在一個IP地址上托管多個加密的網站。早期的瀏覽器沒有包含SNI擴展。因此,當發出建立HTTPS連接的請求時,web服務器沒有太多信息來繼續進行,并且只能回收web服務器正在監聽的每個IP地址的單個SSL證書。
這個問題的一個解決方案是,創建具有多個主題備用名稱(SANs)的證書。這些證書將加密多個域的流量,這些域都可以托管在同一個IP上。Cloudflare就是這樣處理來自不支持SNI的舊瀏覽器的HTTPS流量的。然而,我們限制這一功能僅供我們的付費客戶使用,這和SANs不是一個很好的解決方案的原因一樣:它們是一種黑客攻擊,管理起來很麻煩,如果包含了太多域,可能會降低性能。
最具彈性的解決方案是SNI。Cloudflare認為的一個合理的類比是,把它想象成一個郵政信封。信封里的東西是受保護的,郵差是看不到的。而信封外面是街道地址,郵差根據它來將信封送到正確的建筑位置。在互聯網上,web服務器的IP地址就相當于街道地址。
然而,如果你住在一個多單元的大樓里,僅僅通過一個街道地址是不足以把信封送到正確的收件人手中的。為了補充街道地址,你要寫上一個公寓號碼或收件人的名字。這相當于SNI。如果web服務器承載多個域,SNI可以確保將請求路由到正確的站點,以便返回正確的SSL證書,從而能夠加密和解密任何內容。