什麼是HSTS
HSTS是國際互聯網工程組織 IETF 正在推行一種新的Web安全協議,網站採用HSTS後,用戶訪問時無需手動在地址欄中輸入 HTTPS,瀏覽器會自動採用 HTTPS 訪問網站地址,從而保證用戶始終訪問到網站的加密鏈接,保護數據傳輸安全。
瀏覽器版本支持
Chromium和Google Chrome從4.0.211.0版本開始支持HSTS
Firefox 4及以上版本
Opera 12及以上版本
Safari從OS X Mavericks起
Internet Explorer從Windows 10技術預覽版開始支持,之後微軟又向IE11用戶推送了支持HSTS的更新。
HSTS的優點和缺點
優點:
- 比傳統的302重定向更加安全,不會被劫持;
- 對訪問速度有提示,302 跳轉需要一個 RTT消耗,瀏覽器執行跳轉也需要時間。
缺點
- 用戶首次訪問某網站是不受HSTS保護的。這是因爲首次訪問時,瀏覽器還未收到HSTS,所以仍有可能通過明文HTTP來訪問。
- HSTS會在一定時間段後失效,需要手動設置緩存期。
操作步驟
server {
listen 80 ;
server_name www.itrus.cn;
# 避免首次訪問不跳轉的情況,使用301重定向進行跳轉
return 301 https://$host;
}
server {
listen 443 ssl;
server_name www.itrus.cn;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location /servlet {
add_header X-Served-By "My Servlet Handler";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
proxy_pass http://localhost:8080;
}
}
配置修改完成後,需要重啓nginx服務規則纔會生效。
註釋:
可選的參數:includeSubDomains 設置該策略適用於當前域下的所有子域
參數:max-age=31536000 設置該策略緩存時間爲31536000秒(1年)
一旦設置啓動HSTS策略,功能會在由max-age指定緩衝期中持續生效。在此期間,瀏覽器將會拒絕通過以HTTP訪問web服務,並同時拒絕證書錯誤的例外選項。*
302重定向設置方式
如果暫時繼續使用302方式進行重定向跳轉,請參考以下代碼在http站點配置中添加。
server {
listen 80;
server_name www.itrus.cn;
rewrite ^(.*)$ https://$host$1 permanent;
}
或者
if ($scheme = http) {
return 301 https://$host$request_uri;
}