為了保障使用者的安全和隱私,在網站中使用 SSL 至關重要。 不過,啟用 SSL 並不是最後的工作機會。您可以採取許多措施來進一步強化網站的安全性,包括在 Cookie 設定安全屬性、開啟 HTTP 嚴格傳輸安全性、使用內容安全政策,以及鎖定網站權限等。不過,部署這些強大的功能有時可能會不太容易。為協助您推出更嚴格的安全資料傳輸層,Chrome 46 搭載 HPKP 報告功能。
這些縮寫是什麼意思?
現今的網路安全性仰賴安全資料傳輸層 (SSL) 憑證,也就是經過加密編譯的簽章,能證明網站的身分來自網站。瀏覽器向 https://developers.google.com 之類的網址發出要求時,伺服器會提供安全資料傳輸層 (SSL) 憑證,如果憑證有效,瀏覽器就會允許要求進行後續步驟,並在網址列中顯示包含綠色鎖頭的網站網址。
什麼是有效的憑證?憑證必須由憑證授權單位 (CA) 或其他由 CA 簽署的憑證 (稱為中繼 CA) 簽署,才算有效。瀏覽器和作業系統上有數百個可核發憑證的憑證授權單位清單。不過,問題是,根據預設,這些 CA 都能為「任何」網站核發憑證。如果其中一部裝置遭到入侵或出現不當行為,就會對整個網路造成危害。
請輸入 HTTP 公開金鑰 PIN 碼,或 HPKP。這項標準允許網站傳送 HTTP 標頭,指示瀏覽器記住 (或「固定」) 其 SSL 憑證鏈結的部分。如果後續連線與先前收到的 PIN 碼不相符,瀏覽器就會拒絕以下是 HPKP 標頭的範例:
Public-Key-Pins:
pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";
pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
max-age=259200
這個標頭可指定兩個憑證雜湊做為 PIN 碼。一個是網站憑證鏈中的憑證雜湊,另一個則是備用 PIN 碼,網站可在需要輪替憑證時使用備用 PIN 碼或憑證雜湊。標頭中也包含 max-age
值。過了幾秒後,瀏覽器就會忘記 PIN 碼。
如要進一步瞭解 HPKP 的一般資訊,請參閱規格或其他 Chrome 開發人員 Chris Palmer 撰寫的優質網誌文章。
請問要立即開啟 HPKP 嗎?
不一定。部署 HPKP 時,很容易會出錯並誤點 DoS 您的網站。如果您將網站固定使用一組憑證,接著必須部署新的憑證,則已經看到 PIN 碼的使用者就無法存取您的網站 (根據標頭中的 max-age
值)。
要找出正確的做法可能並不容易,因此 HPKP 目前大多用於幾個容易維護安全性的 高知名度網站。如果您決定開啟 HPKP,一開始可以使用極短的 max-age 值,如果沒有任何問題,則逐步增加該值。
什麼是 HPKP 報告?這類功能有什麼幫助?
Chrome 46 推出 HPKP 報告功能,可讓您在推出 HPKP 時偵測錯誤設定。
首先,您可以傳送 Public-Key-Pins-Report-Only
標頭,而非 Public-Key-Pins 標頭:
Public-Key-Pins-Report-Only:
max-age=2592000;
pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";
pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";
report-uri="https://example.net/pkp-report"
當網站傳送這類標頭時,Chrome 會確認目前的連線與 PIN 碼是否相符,並在不相符的情況下將報告傳送至 report-uri
。Chrome 絕對不會封鎖根據 Report-Only 標頭中的圖釘提出的要求,因此您可以安全地試用 HPKP,看看這樣是否會對使用者造成問題,而不會對網站執行 DoSing 的風險。
請注意,「僅限報表」標頭僅適用於接收請求。瀏覽器不會記住「僅限報告」的圖釘,它是實際圖釘。這樣一來,您就能測試設定而不必擔心將使用者的瀏覽器快取錯誤值。此外,您也可以逐步推出 (例如只針對單一資源) 推出,避免伺服器過多的報表過多。
當您推出真正的 Public-Key-Pins
標頭,開始強制執行 PIN 碼時,您也可以在標頭中加入 report-uri 值,這樣您就能在發生問題時繼續收到報告。
HPKP 違規報告有哪些內容?
HPKP 違規報表是透過 HTTP POST 要求傳送至您設定的 report-uri
的 JSON 訊息。您可在spec中找到欄位清單,但我們在此特別介紹其中兩個:served-certificate-chain
和 validated-certificate-chain
。served-certificate-chain
是 Chrome 在設定要求的 SSL 連線時所收到的憑證。另一方面,validated-certificate-chain
則是 Chrome 在嘗試驗證伺服器憑證時重新建構的鏈結,幸好與 served-certificate-chain
不同。不同的用戶端會以不同的方式執行憑證驗證,而這可能是 HPKP 設定錯誤的常見原因。如果您收到非預期的報表,請務必檢查這個欄位。
最後一個「gotcha」
如果您部署 HPKP 報告,Chrome 會對所有要求 (包括報告傳送要求) 進行固定驗證。因此,如果您已為網站部署 HPKP,您可能會想將 HPKP 報表傳送至尚未固定的其他網域。否則,網站上的 PIN 碼違規時,同樣會導致檢舉失敗的違規網址,您也不會收到這類報告。
如果您沒有其他網域,可以改用 report-uri.io 這類服務處理違規檢舉。