阻止 Google Chrome 將所有具有共同基礎的 URL 視為 SSL 連接

阻止 Google Chrome 將所有具有共同基礎的 URL 視為 SSL 連接

我透過 ISP 提供的 DNS 名稱託管多個網站,並使用安裝的 haproxy 將它們分割到路由器的 80 連接埠之外。它對我的(我認為是 11 個)獨特的網站非常有效,直到我將其中一個更改為 https。

現在,Google Chrome 假定我的所有網站都是 https,而我只能造訪 https 的網站:-(

我懷疑 Chrome 這樣做的原因是因為我的所有網站都以我的網域 (myexampledomain.com) 開頭,範例網站 1 是http://myexampledomain.com/website-one/main.html範例網站 2 是https://myexampledomain.com/website-two/main.html並且由於某種原因,chrome成功訪問https連結後,非https連結自動以https方式存取。刪除 s(使其成為 http),chrome 只是將其添加回那裡。

當我透過 Internet Explorer 9 造訪我的網站時,它們仍然可以正常運作,或者至少可以在連線不自動完成為 https 的情況下進行存取。所以,不,我的後端某處沒有 http 到 https 重定向,這只是 chrome 的愚蠢行為。有人知道為什麼 Chrome 很愚蠢,以及是否有辦法仍然從 Chrome 訪問我的其他網站?我討厭 IE,使用它會給我帶來身體上的痛苦;-)

答案1

(將我們的討論寫成正確的答案:)

Google Chrome(以及所有其他現代瀏覽器)支持嚴格的運輸安全HTTP 標頭,它通知瀏覽器「該網站應該只能透過 HTTPS 訪問,因此將來即使用戶請求 HTTP,也應該給他們 HTTPS」。隨著使用 HTTPS 變得越來越普遍,發送此標頭正在成為新軟體和框架中的預設設置,通常情況下,如果設定了 HTTPS(需要這樣才能使 Strict-Transport-Security 標頭產生任何效果) ,最好將它用於所有事情。正如您所發現的,您所使用的軟體預設配置為以這種方式運作。您沒有在 Internet Explorer 9 中看到該行為,因為它太舊,無法支援 Web 的此功能。

兩種解決方案是 (1) 更改軟體的配置以不傳送標頭,因為您不想強制所有使用者都通過 HTTPS,或 (2) 更改所有網站以透過 HTTPS 正常運作。我通常會推薦第二個選項,因為一旦您配置了伺服器並擁有有效的 HTTPS 證書,現在就真的不需要在 Internet 上使用未加密的連接了。

答案2

根據 Peter Cooper Jr. 的評論回复,我的心痛是由我的 NGINX 安裝與 gitlab 綜合捆綁在一起引起的,它有效地告訴連接客戶端,他們在與其通信時應該始終使用 https,對於 Gitlab/NGINX,安全通訊期限設定為24個月!

有關 STS 標頭的資訊:http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Gitlab 安裝資訊:https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md

相關內容