將 HTTP 連接升級到 SSL/TLS
我目前有一個伺服器,它會自動將所有 HTTP 請求重定向到等效的 HTTPS 站點。問題是某些瀏覽器似乎不接受 SSL 證書 (StartSSL.com) 或不支持 SNI,因此它們會收到證書警告並且使用者不會繼續在網站上沖浪。
是否有任何機制試圖讓瀏覽器使用 HTTPS 而不是普通的 HTTP,並且當它不起作用時(例如,不接受證書或不支持 SNI)它會繼續使用 HTTP。
目前我正在使用 Apache 2.4 和多個虛擬主機,這些主機都使用
Redirect / https://domain.example/
.
如果 https 不起作用,瀏覽器永遠不應該自行降級為 http,因為攻擊者需要做的就是使 https 不可用(例如阻止埠 443)。因此,唯一可以做到這一點的方法是通過從伺服器指示瀏覽器這樣做,例如通過發送 http 重定向。當然,這應該通過安全連接發送(否則中間人可能會偽造它),但不幸的是,安全連接失敗正是您的問題。
總結:不,這是不可能的,這樣更好。
順便說一句,所有現代瀏覽器都支持 SNI,但並非所有應用程序(例如 Java 應用程序等)都支持。如果您在 Web 伺服器上有多個域,但這些應用程序只需要一個域,您可以將此域的證書設置為預設值。否則,您將需要獲得一個(更昂貴的)證書,其中包含所有需要的域作為主題替代名稱。
用另一個想法編輯:您可以嘗試做的是從您身邊以 https 下載圖像,並使用 img-tag 上的 onerror 處理程序檢查成功。也許這不會觸髮使用者可見的警告,而是無法載入。如果成功,您就知道可以進行 https 訪問並重定向使用者。
除此之外,您必須問自己,如果您也接受使用 http 的訪問,為什麼要提供 https。要麼存在應該保護的數據,要麼沒有。只要您提供對 http 的回退,攻擊者就很容易強制執行 http 而不是 https。