HSTS 主要是通過服務器發送響應頭的方式來控制瀏覽器操作:
首先在服務器響應頭中添加 HSTS 響應頭
**Strict-Transport-Security**: max-age=expireTime [; includeSubDomains] [; preload] 此響應頭只有在 https 訪問返回時才生效,其中[ ]中的參數表示可選; **includeSubDomains**:包含它,意味著當前域名及其子域名均開啟HSTS保護。 此參數影響范圍較大,如果某些子域名沒有啟用 https,則將導致無法訪問,添加請謹慎! **preload**:申請將域名加入到瀏覽器內置列表時使用。- 每個連接到該網站及其子域的,從這個頭被接收的時刻起必須是一個 HTTPS 連接。 如果瀏覽器接收到使用 HTTP 加載資源的請求,則必須嘗試使用 HTTPS 請求替代。 如果 HTTPS 不可用,則終止連接。如果證書無效,將阻止建立連接。
設置 max-age 參數,時間設置不宜過長,建議設置時間為 6 個月
- 注意:生產環境下使用HSTS應當謹慎,一旦瀏覽器接收到HSTS Header(假如有效期是1年),但網站的證書又恰好出了問題,那么用戶將在接下來的1年時間內都無法訪問到你的網站,直到證書錯誤被修復,或者用戶主動清除瀏覽器緩存。因此,建議在生產環境開啟HSTS時,先將max-age的值設置小一些,例如5分鐘,然后檢查HSTS是否能正常工作,網站能否正常訪問,之后再逐步將時間延長,例如1周、1個月,并在這個時間范圍內繼續檢查HSTS是否正常工作,最后才改到1年。
當用戶下次使用 HTTP 訪問,客戶端就會進行內部跳轉,并且能夠看到 307 Redirect Internel 的響應碼
- 307狀態碼,和 301/302 狀態碼不同,它并不是服務器返回的,而是瀏覽器本地自動生成,即在瀏覽器本地自動發生了 http 到 https 的跳轉,與網站服務器沒有任何交互。
- 響應頭中:Non-Authoritative-Reason:HSTS,也標明了是因為 HSTS 功能的緣故,導致瀏覽器本地發生了 http 到 https 的跳轉。
網站服務器變成了 HTTPS 訪問源服務器
開啟 HSTS 后網站可以有效防范中間人的攻擊,同時也會省去網站 301/302 跳轉花費的時間,大大提升安全系數和用戶體驗。
推薦文章