HSTS 是 HTTPS 性能優化和安全優化中最重要的一環,能夠給 HTTPS 帶來好處,這將指示瀏覽器只通過 HTTPS 連接到服務器和整個域。即使用戶鍵入 http://www.domain.com 的網址,也可以使用書籤或第三方 HTTP 鏈接,瀏覽器會自動將請求升級為 HTTPS。
內容目錄:
- HSTS Preload List
- HSTS header 標頭的寫法
甚麼是 HSTS,詳細說明請參考這一篇:解決缺陷,讓 HSTS 變得完美
為什麼要加入 HTTPS,簡單明瞭的說明,這樣理解 HTTPS 更容易。
https://showme.codes/2017-02-20/understand-https/
HSTS Preload List
想要將自己的域名也加入 HSTS Preload List 前,有幾個規定:
- 一個有效 SSL 加密證書 ( 免費的 Let’s Encrypt 也可以 )
- 正確的 http 跳轉 https 的配置
- https 配置中要有 HSTS header
- 所有子域名也要配置 https 加密證書,DNS 設置要正確加上 www 別名。
上面 4 點準備好後,就可以到 HSTSPreload.org 提交你的域名,一搬 7 ~ 10 天左右就可以加入 HSTS 列表。
提交 HSTS 域名網址:
使用 Chrome 檢測是否有加入 HSTS 列表:
chrome://net-internals/#hsts
把上面的網址貼上 Chrome 瀏覽器後,在 Query domain 鍵入域名查詢。
HSTS header 標頭的寫法
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
上面配置的意思是,在接下來的一年 ( 31536000 秒 ) 中,瀏覽器只要向 example.com 或其子域名傳送 HTTP 請求時,必須採用 HTTPS 來發起連線。比如,用戶點擊你的網址 http://www.example.com/ ,瀏覽器就會自動將 http 轉寫成 https,然後直接向 https://www.example.com/ 傳送請求。
在接下來的一年中,如果你的 example.com SSL 加密憑證無效,用戶也不能忽略瀏覽器警告繼續訪問你的網站。
所以你要提交 HSTS Preload List 時要想清楚,提交成功後,以後連同子域名都要加入 SSL 加密證書,如果後悔不想使用 HSTS,目前退出的機制不是很方便,先將 HSTS header 標頭刪除,然後使用郵件 hstspreload@chromium.org 提出刪除。
如果只想瀏覽器可以直接 https 訪問網站,且不影響子網域,header 寫法如下:
add_header Strict-Transport-Security "max-age=31536000";
max-age = 31536000 的時間,可以自己定義,最小可以 5 分鐘 (max-age = 300),最大可以到 2 年 (max-age = 63072000),在 HSTSPreload.org 規則中,至少要有 18 週 (10886400 seconds)。
引用 What is HSTS? 作為結論:
- HTTP 嚴格傳輸安全性是一種簡單但功能強大的 Web 安全策略,可保護 HTTPS 網站免受 MITM 攻擊。
- 從 HTTP 切換到安全 HTTPS 連接 ( 使用 SSL ) 提供了防禦降級攻擊的最佳防禦。
- HSTS 確保所有通信都被加密,並且所有發送和接收的響應都被傳送到已驗證的服務器並從其接收。
What is HSTS?
發佈留言