如何在IIS7.5下設定HTTP Strict Transport Security
因為之前專案在轉換到 HTTPS 協定之後出現一個資安上的 low issue
檢測工具 : HP Web Inspect
系統環境 : Windows Server 2008 R2 Standard
Low Issue : Insecure Transport: HSTS Not Set ( 11365 )
上網搜尋了一下什麼是 HSTS
根據維基百科的敘述:
HTTP 強制安全傳輸技術(英語: HTTP Strict Transport Security ,縮寫: HSTS )是一套由網際網路工程任務組發布的網際網路安全策略機制。網站可以選擇使用 HSTS 策略,來讓瀏覽器強制使用 HTTPS 與網站進行通信,以減少連線劫持風險。
HSTS 的作用是強制用戶端(如瀏覽器)使用 HTTPS 與伺服器建立連線。伺服器開啟HSTS的方法是,當用戶端通過 HTTPS 發出請求時,在伺服器返回的 Response Headers 中包含Strict-Transport-Security欄位。非加密傳輸時設定的 HSTS 欄位無效;此外,HSTS 可以用來抵禦 SSL 剝離攻擊( SSL 剝離攻擊為中間人攻擊的一種)。
再根據Will 保哥的解說:
HTTP Strict Transport Security (HSTS) 是一份國際標準規格 (RFC 6797),主要用來宣告瀏覽器與伺服器之間的通訊方式必須強制使用 TLS/SSL 加密通道,只要從伺服器端送出一個 Strict-Transport-Security 標頭 (Header) 給瀏覽器,就可以告訴瀏覽器在未來的某段時間內一律使用 SSL 連接該網站 (可設定包含所有子域名網站),如果有發生憑證失效的情況,使用者將無法瀏覽該網站,如此一來便可大幅減少中間人攻擊的問題發生。
那麼接下來就讓我們一起來設定HSTS吧!
目前最常看到的解法是用 web.config 的方式:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000"/>
</customHeaders>
</httpProtocol>
</system.webServer>
但這不完全正確,因為即使不在 HTTPS 協定下,依然會在 Response Headers下發送 HSTS,但其實不應該透過 HTTPS 發送 HSTS,而是只能透過 HTTPS 來發送。因此,在這邊必須利用到IIS下的模組 - URL Rewrtie 來幫我們達成!
筆者先貼上完成設定後的 web.config,接下來再分享如何設定!
Step 1:
進入IIS管理員介面 --> 於站台下選擇URL Rewrite模組 --> 新增一輸入規則
進入 URL Rewrite 後,先於上方的輸入規則框框內點右鍵,並點選新增規則
接著輸入名稱、模式、條件、動作
名稱: HTTP to HTTPS redirect
模式: (.*)
條件:輸入{HTTPS}、類型為符合模式、模式為off
動作:動作類型為重新導向、重新導向URL請輸入https://yourIP or DNS/{R:1}、附加查詢字串打勾、重新導向類型請選擇永久(301)
(詳細設定請參考下圖)
Step 2:
接著新增輸出規則
同樣進入URL Rewrite模組 --> 於下方輸出規則上點選右鍵 --> 新增一輸出規則
接著輸入名稱、變數名稱、模式、條件、動作
名稱:Add Strict-Transport-Security when HTTPS
變數名稱:RESPONSE_Strict_Transport_Security
模式:.*
條件:{HTTPS}、類型為符合模式、模式為on
動作:動作類型為重寫、值為max-age=31536000
(詳細設定可參考下圖)
這樣就完成新增 HSTS 啦!
切記別忘了重新啟動站台套用設定哦!