昨天為了某Server 申請Let’s Encrypt SSL証書,但是一直出現連線HTTP 會自動彈至HTTPS 的問題,不知道是否這個原因,令到Let’s Encrypt 的Certbot 不能進行驗証。
找了很久,確認了没有在Virtual Host 及.htaccess 做HTTPS Redirect,但都找不到原因,最後才(被)發現是因為設定了 HSTS。
向Google 大神查詢,原來是防止駭客騎劫HTTP 的手段,但似乎不是太廣為人用。
主要是在Web Server 中設定特定Header,如
Header always set Strict-Transport-Security “max-age=63072000; includeSubdomains;”
令以往由Web Server 主導的HTTPS Redirect 轉為由Browser主導,強制用戶改用HTTPS,加強網上瀏覽的安全性。
但此安全策略機制也有缺點,如用戶首次存取某網站是不受HSTS保護,而且保護是有時間限制,取決於當前系統時間,如作業系統没有定時更新系統時間,容易被人繞過。
參考:
- How to enable HSTS on Apache, NGINX and Lighttpd
- 什麼是 HSTS – HTTP Strict Transport Security
- HTTP強制安全傳輸技術
- 你所不知道的 HSTS