2025年11月5日 星期三

[研究]GCB,IIS和Web.config都設定HSTS值後最終 max-age值為何?

[研究]GCB,IIS和Web.config都設定HSTS值後最終 max-age值為何?

2025-11-05

********************************************************************************
【GCB,IIS 10 項次42】

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
42 TWGCB-04-014-0042 傳輸加密 HSTS標頭 ▪這項原則設定決定是否在HTTP回應標頭設定使用HTTP嚴格傳輸安全(HTTP Strict Transport Security,以下簡稱HSTS)
▪HSTS主要用來宣告瀏覽器與伺服器之間的通訊方式必須強制使用TLS/SSL加密通道,只要從伺服器端送出一個HSTS標頭(Header)給瀏覽器,就可以告訴瀏覽器在未來某段時間內一律使用SSL連接該網站(可設定包含所有子域名網站),如果有發生憑證失效之情況,使用者將無法瀏覽該網站,如此一來便可大幅減少中間人攻擊之問題發生
伺服器 ▪IIS管理員\伺服器\IIS\HTTP回應標頭\動作\開啟功能\新增
▪名稱:Strict-Transport-Security
▪值:max-age=480(已使用HTTPS連線的網站480秒內不再檢查)
▪名稱:Strict-Transport-Security
▪值:max-age設為480以上







上面 HSTS 是設定到「伺服器」層級,但HSTS可以靠 Web.Config 設定,是「網站」層級,會比較好。但 GCB既然是「伺服器」層級,最好也設定一下。

<configuration>
<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Strict-Transport-Security" value="max-age=31536000" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
</configuration>


GCB建議max-age設定480以上,但RFC 6797(“HTTP Strict Transport Security (HSTS)”)的定義,關於 Strict-Transport-Security: max-age=<seconds> 的 max-age 沒有明文規定一個上限值,實務上多數安全建議會使用 1 年(31536000 秒),設定過長的 max-age,而網站/憑證出現問題(如憑證到期、子域未支援 HTTPS 等),可能造成使用者無法回退到 HTTP 或難以修正。

********************************************************************************

GCB,IIS 設定

  • IIS管理員\伺服器\IIS\HTTP回應標頭\動作\開啟功能\新增
  • 名稱:Strict-Transport-Security
  • 值:max-age=480(已使用HTTPS連線的網站480秒內不再檢查)

Web.config 設定

<add name="Strict-Transport-Security" value="max-age=31536000" />

請問最後 ASP.NET WebForm 網站的 max-age 是多少?

ChatGPT

ASP.NET / IIS 的設定合併原則如下:

層級 優先權 設定檔 備註
1️⃣ 應用程式層級 最高 Web.config 可覆蓋 IIS 層級設定
2️⃣ 站台層級 <site> 內的設定
3️⃣ 伺服器層級 applicationHost.config IIS 管理員設定在這裡
4️⃣ machine.config 最低 .NET 全域設定

最終 ASP.NET WebForm 網站的 max-age = 31536000 秒(約 1 年)

可用命令檢查:

curl -I https://your-site/

看回傳的 HTTP 標頭中:

Strict-Transport-Security: max-age=31536000

(完)

沒有留言:

張貼留言