我正在設置一個新的Web服務器。除了TLS / HTTPS,我還在考慮實施嚴格傳輸安全性和其他HTTPS強制執行機制。
這些似乎都是基於我自己的假設除了 https://www.example.com
之外,還提供 http://www.example.com
。為什麼我不只提供HTTPS?也就是說,是否有基於安全性的理由來提供HTTP服務-例如,如果我不設置HSTS,有人可以欺騙 http://www.example.com
嗎?
我正在設置一個新的Web服務器。除了TLS / HTTPS,我還在考慮實施嚴格傳輸安全性和其他HTTPS強制執行機制。
這些似乎都是基於我自己的假設除了 https://www.example.com
之外,還提供 http://www.example.com
。為什麼我不只提供HTTPS?也就是說,是否有基於安全性的理由來提供HTTP服務-例如,如果我不設置HSTS,有人可以欺騙 http://www.example.com
嗎?
出於可用性的原因,您需要提供從所有HTTP URL到HTTPS的重定向。否則,初次訪問者只要在瀏覽器的URL欄中輸入 example.com/some/page
,就會遇到連接錯誤。
提供重定向並不能使您更脆弱。在瀏覽器中沒有您的HSTS條目的用戶仍然會發出HTTP請求。 HTTP上是否存在真正的服務與中間的人無關。
因此,您需要運行HTTP服務器,但是除了重定向之外,它不需要響應任何其他內容
為什麼我不只提供https服務?
主要原因是瀏覽器的默認行為和向後兼容性。
當最終用戶(即不了解協議或安全性)在瀏覽器中鍵入網站地址時,瀏覽器默認使用HTTP。有關為什麼瀏覽器選擇此行為的更多信息,請參見此問題。
因此,用戶很可能無法訪問您的網站。
使用舊系統和舊瀏覽器的某些用戶可能不支持HTTPS或更可能沒有最新的根證書數據庫 ,或不支持某些協議。
在這種情況下,它們將無法訪問網站或出現安全警告。您需要定義最終用戶的安全性是否足以強制使用HTTPS。
許多網站仍在偵聽HTTP,但會自動重定向到HTTPS,並忽略 really 的用戶瀏覽器。
如果我沒有設置HSTS,有人可以欺騙 http://www.example.com嗎?
如果攻擊者想欺騙 http://www.example.com
,則它需要以某種方式控制域或控制IP地址。
我想你的意思是:攻擊者可以執行中間人攻擊嗎?
在那種情況下可以,但是即使有或沒有HSTS:
沒有HSTS :攻擊者可以輕鬆地位於服務器和用戶中間,並且是主動的(即,修改內容)或被動的(即,竊聽)
使用HSTS :用戶首次嘗試使用HTTP訪問站點時,攻擊者可能會迫使用戶使用HTTP。但是,攻擊者可以執行攻擊的時間窗口有限。
與許多網站一樣,您應該允許HTTP連接,並使服務器將用戶重定向到HTTPS版本。這樣,您將覆蓋瀏覽器的默認行為,並確保您的用戶使用HTTPS版本。
沒有正確協議或根證書的舊系統將無法訪問該網站(或至少會發出警告) ),但這不是問題。
禁用HTTP弊大於利。它並不能真正提供更多的安全性。
如果保護大多數資源的用戶無法訪問該資源,那麼為保護該資源而添加的任何安全性都是無用的。如果最終用戶由於其瀏覽器默認為HTTP而無法訪問您的網站,並且您不偵聽HTTP連接,那麼有什麼好處?
只需執行HTTP 301重定向到HTTPS版本。
投票贊成的答案非常好。如果您完全關閉HTTP,則將犧牲可用性而不會對安全造成重大影響。
但是,您可以使用HSTS Preload選項減輕這種情況。預加載網站意味著您向瀏覽器供應商註冊了域名,他們將對他們的瀏覽器進行硬編碼,以僅通過HTTPS訪問您的網站。這意味著,如果用戶嘗試通過HTTP訪問您的網站,則瀏覽器會將請求更改為HTTPS。他們的用戶無需先獲取HSTS標頭即可獲得安全保護。他們將始終通過安全通道與您建立聯繫。
現在,這不能保護正在使用尚未更新其僅HTTPS網站列表的瀏覽器的用戶。即使使用預加載,我也建議不要為使用舊版本或未更新瀏覽器的少數人關閉HTTP。
但是請注意,預加載是永久的!要退出預加載列表非常困難。
要進入預加載列表,請執行以下操作: https://hstspreload.org/
您不必這樣做。
某些較舊的瀏覽器和操作系統(通常是並行運行)沒有較新的證書根權限,但是它們通常不支持較新的HTTPS
您可能擁有不支持HTTPS,自定義腳本等的設備。
沒有人可以欺騙HTTP,因為DNS記錄屬於您,A記錄指向您的特定IP地址(在理想情況下)。
您要做的只是為了保持兼容性,就是這樣。
您應該僅支持HTTP以支持向後兼容。並確保您在後端服務器中正確重定向到HTTPS。最好的方法是僅對您的主頁或任何不包含敏感信息的頁面提供HTTP支持。您不得支持對用戶在身份驗證後可以訪問的頁面的HTTP請求。
即使有設備(IoT)正在訪問服務器的敏感數據,也必須強制它們使用TLS(許多當前設備可以存儲您的證書並創建TLS連接)。請記住,3.0之前的SSL版本確實存在許多漏洞,例如poodlebug等。因此,請從Web服務器禁用所有以前的版本,並僅允許> TLS 1.1。
您最好實現HSTS。我建議您也考慮在您的站點上實施HPKP的可行性。
除了https之外,我還使用http來實現兩個目的: