HTTPS相關機制

現在許多網站為了安全性會透過HTTPS來連線,那在使用HTTPS之後,還有什麼設定能再提升網站連線安全呢?本文將會介紹HTTP強制安全傳輸技術(HTTP Strict-Transport-Security),簡稱HSTS。就算使用者是透過HTTP訪問網站,也會強制改用HTTPS,避免HTTP可能出現的風險。

HTTP vs. HTTPS

HTTP和HTTPS只差了一個「S」,而「S」指的是安全(Secure)。HTTP與HTTPS的不同,在於HTTPS傳輸時還會利用TLS/SSL來加密封包,避免被監聽造成資料外洩或是中間人攻擊等風險。

HSTS

大家可能會好奇,我的網站已經是HTTPS,就算訪客是透過HTTP來連線也會自動跳轉,那有HSTS跟沒有HSTS有什麼差別呢?

若訪客透過HTTP來訪問HTTPS網站,雖然網站可能設有自動跳轉機制,第一個連線封包仍會是未加密的。若訪問使用HSTS的網站,首次存取時瀏覽器會一併記憶,之後再訪問會自動將HTTP轉為HTTPS。

HSTS設定

Strict-Transport-Security: max-age=31536000

不同網站伺服器需有不同的設定方式,而指令意義如下:

  • max-age=<expire-time>:表示啟用的持續時間,以秒為單位。
  • includeSubDomains:(選擇性設定)瀏覽器將強制使用HTTPS的狀態套用至所有子網域。
  • preload:(選擇性設定)非HSTS規範的一部份。在訪問網站前直接使用HTTPS作為傳輸協議,能讓速度稍微加快。

Preload設定

HSTS預先載入服務由Google維護,Chrome瀏覽器中存在HSTS Preload List,會把支援HSTS網域名稱寫進去,一些主流瀏覽器(Firefox、Opera、Safari、IE 11、Edge)中也有基於Chrome清單的HSTS Preload List。

若網站確認會永久使用HTTPS協議,可主動提交網域名稱至HSTS Preload List Submission網站。不過要注意的是,將網域名稱從Preload List中移除是需要花費一段時間。Chrome可能需要幾個月的時間才能透過更新進行修改,而其他瀏覽器的狀況則無法保證。因此在新增Preload設定前,建議先評估並進行多階段的測試,確保網站沒發生問題再新增Preload設定。

在設定好HTTS後,如果還想再提升網站安全性,也許可以考慮HSTS設定。但在添加或調整任何設定前,都應該先進行評估,並確認了解所有設定的意義與影響。避免發生網站無法使用的情況。

參考資料