是否有任何理由不在網站上強制執行 HTTPS?
我經常光顧的一個網站終於決定在他們的伺服器上啟用 TLS,只是不像許多網站那樣強制要求它。維護者聲稱 TLS必須是可選的。為什麼?
在我自己的網站上,我早就設置了長期強制的 TLS 和 HSTS,並且禁用了較弱的密碼套件。通過 HTTP 301 可以保證明文訪問被隔離到 TLS 保護的版本。這會對我的網站產生負面影響嗎?
使用 TLS 有幾個很好的理由
(只有少數不這樣做的邊際理由)。
如果站點有任何身份驗證,則使用 HTTP 公開竊取會話和密碼。
即使在靜態的、僅提供資訊的站點上,使用 TLS 也可以確保沒有人篡改數據。
自Google I/O 2014以來,Google 已採取多項措施鼓勵所有網站使用 HTTPS:
- Google一直在幫助網站管理員更安全地配置他們的伺服器,但也使用HTTPS 作為排名信號。
- 最近,Google Chrome 已開始將 HTTP 站點標記為不安全,作為將所有 HTTP 站點標記為不安全的長期計劃的一部分。
- Google Chrome 開發者團隊的 Mythbusting HTTPS講座清楚地表明了他們的態度。
Mozilla 安全部落格還宣布棄用非安全 HTTP,使所有新功能僅適用於安全網站,並逐步取消對非安全網站的瀏覽器功能的訪問,特別是對使用者安全和隱私構成風險的功能。
強制實施 TLS 也有幾個很好的理由
如果您已經擁有廣泛信任的證書,為什麼不總是使用它呢?幾乎所有目前的瀏覽器都支持 TLS 並安裝了根證書。多年來我實際看到的唯一兼容性問題是 Android 設備和缺少中間證書頒發機構,因為 Android 只直接信任根 CA。這可以通過將伺服器配置為將證書鏈發送回根 CA 來輕鬆防止。
如果您的維護人員仍然希望允許沒有直接的 HTTP 連接
301 Moved Permanently
,例如為了確保從一些非常舊的瀏覽器或移動設備訪問,瀏覽器無法知道您甚至配置了 HTTPS。此外,您不應在沒有以下內容的情況下部署HTTP嚴格傳輸安全 (HSTS)301 Moved Permanently
:7.2. HTTP Request Type If an HSTS Host receives a HTTP request message over a non-secure transport, it SHOULD send a HTTP response message containing a status code indicating a permanent redirect, such as status code 301 (Section 10.3.2 of [RFC2616]), and a Location header field value containing either the HTTP request's original Effective Request URI (see Section 9 "Constructing an Effective Request URI") altered as necessary to have a URI scheme of "https", or a URI generated according to local policy with a URI scheme of "https").
Tor Project和Electronic Frontier Foundation認識到了為這兩種協議配置的各種站點的問題,並通過多瀏覽器HTTPS Everywhere擴展來解決:
Web 上的許多站點對通過 HTTPS 的加密提供了一些有限的支持,但使其難以使用。例如,他們可能預設使用未加密的 HTTP,或者使用返回未加密站點的連結填充加密頁面。
混合內容也是一個巨大的問題,因為通過修改通過非安全 HTTP 連接載入的 JavaScript 或 CSS 可能對 HTTPS 站點進行 XSS 攻擊。因此,現在所有的主流瀏覽器都會警告使用者頁面內容混合,並拒絕自動載入。這使得在沒有HTTP 重定向的情況下很難維護站點
301
:您必須確保每個 HTTP 頁面只載入 HTTP 內容(CSS、JS、圖像等),並且每個 HTTPS 頁面只載入 HTTPS 內容。在兩者上使用相同的內容很難實現這一點。