Domino V12 起 notes.ini 支援多個 HTTPAdditionalRespHeader

為什麼這篇對你重要

Domino 站台要設安全 HTTP 標頭(HSTS、CSP、X-Frame-Options 等),組織通常會落在下列兩種設定模型之一:

  1. 走 Internet Site 文件 + Web Site Rules(站台規則) —— 圖形介面設定、可針對每個站台設不同政策。要設自訂 HTTP 標頭,用 Web Site Rule 文件。
  2. 走 Server 文件(不啟用 Internet Sites)+ notes.ini —— 比較簡單、整台伺服器一份設定。要設自訂標頭,只能用 HTTPAdditionalRespHeader 這個 notes.ini 參數。

走模型 2 的組織,notes.ini 是唯一的安全標頭設定點,不是後備而是日常。 走模型 1 的組織,notes.ini 也是當網頁伺服器(HTTP task)起不來、管理用戶端(admin client)進不去時的救火稻草。

兩種情境都會踩到同一個歷史限制:HTTPAdditionalRespHeader 從 9.0.1 FP6 引進以來,只支援一個標頭。寫第二行 HTTPAdditionalRespHeader=... 會直接覆蓋上一行(notes.ini 後寫贏前寫的特性),等於只能挑一個安全項目(X-Frame-Options 或 CSP,二選一),其他全裸。

HCL 在 Domino V12.0.x 起 用一個簡單的命名規則把這個限制拿掉了。

舊寫法(單一)

HTTPAdditionalRespHeader=X-Frame-Options: SAMEORIGIN

第二行的 HTTPAdditionalRespHeader=... 會把第一行覆蓋掉,因此事實上只能設一個。要在站台沒起來的情況下同時開 HSTS、CSP、X-Frame-Options,這條路是走不通的。

新寫法(V12.0.x 起,可放多個)

第一個標頭維持原語法(不加編號),其餘標頭用 兩位數編號01 開始:

HTTPAdditionalRespHeader=X-Frame-Options: SAMEORIGIN
HTTPAdditionalRespHeader01=X-XSS-Protection: 1; mode=block
HTTPAdditionalRespHeader02=Content-Security-Policy: default-src 'self'
HTTPAdditionalRespHeader03=Strict-Transport-Security: max-age=31536000; includeSubDomains
HTTPAdditionalRespHeader04=X-Content-Type-Options: nosniff

幾個重點:

  • 編號從 01 開始,不是 1(兩位數,HTTPAdditionalRespHeader1 會被忽略)
  • 編號順序不影響行為(Domino 全部讀進去),但連號 01/02/03 比較好維護
  • 改完要 tell http restart 或重啟整個伺服器才生效
  • 適用 HCL Domino 12.0.x 與更新版本(更舊的版本還是只能一個)

一份「最低安全標頭」基礎組

如果你站台目前完全沒設安全標頭,下面這 5 行先放進 notes.ini 就涵蓋了 SSL Labs / Mozilla Observatory 大多數的基本要求:

HTTPAdditionalRespHeader=Strict-Transport-Security: max-age=31536000; includeSubDomains
HTTPAdditionalRespHeader01=X-Frame-Options: SAMEORIGIN
HTTPAdditionalRespHeader02=X-Content-Type-Options: nosniff
HTTPAdditionalRespHeader03=Referrer-Policy: strict-origin-when-cross-origin
HTTPAdditionalRespHeader04=Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'

CSP 那行幾乎一定要按你站台實際情況調整 —— unsafe-inline(允許行內樣式)嚴格說不應該開,但很多 Notes 網頁應用的行內樣式很多,先求站台不破再慢慢收斂。HSTS 的 max-age=31536000 是一年,第一次上線建議先放小一點(例如 300 五分鐘)試水溫,確定全 HTTPS 化沒問題再拉長。

兩種模型的取捨

如果你的環境有啟用 Internet Sites,Web Site Rules 在大部分情境下還是比較適合長期管理,因為:

  • 可以針對每個站台設不同政策(*.example.comapi.example.com 可以套不同規則)
  • 變更歷史看得出來(誰改了、什麼時候改)
  • 改完只要 tell http refresh,不用 tell http restart —— refresh 不會踢掉使用者連線也不清快取,比較溫和

如果你的環境只用 Server 文件、沒啟用 Internet Sites,那 notes.ini 本來就是你唯一的選擇。V12 的多標頭支援是真正的功能解鎖,不是「後備路徑的補丁」。

注意 tell http refreshtell http restart 觸發的範圍不同:

  • tell http refresh 只重讀 Web Site 文件(含站台規則、檔案保護、認證範圍)
  • tell http restart 才會重讀 Server 文件、notes.ini、HTTPD.CNF、Servlets

所以這次改 notes.iniHTTPAdditionalRespHeader 一定要 tell http restart 才會生效。

參考來源

← 回到文章列表