HTTP公鑰固定

HTTP公鑰固定(英語:HTTP Public Key Pinning,縮寫HPKP)是HTTPS網站防止攻擊者利用數字證書認證機構(CA)錯誤簽發的證書進行中間人攻擊的一種安全機制,用於預防CA遭受入侵或其他會造成CA簽發未授權證書的情況。採用公鑰固定時,網站會提供已授權公鑰的哈希列表,指示客戶端在後續通訊中只接受列表上的公鑰。

基本介紹

  • 中文名:HTTP公鑰固定
  • 外文名:HTTP Public Key Pinning
  • 縮寫:HPKP
  • 性質:安全機制
  • 領域:網路安全
工作原理,違規回報,瀏覽器支持,套用現狀,

工作原理

伺服器通過Public-Key-Pins(或Public-Key-Pins-Report-Only用於監測)HTTP頭向瀏覽器傳遞HTTP公鑰固定信息。
HTTP公鑰固定將網站X.509證書鏈中的一個SPKI(和至少一個備用密鑰)以pin-sha256方式進行哈希,由參數max-age(單位秒)所指定一段時間,可選參數includeSubDomains決定是否包含所有子域名,另一個可選參數report-uri決定是否回報違反HTTP公鑰固定策略的事例。在max-age所指定的時間內,證書鏈中證書的至少一個公鑰須和固定公鑰相符,這樣客戶端才認為該證書鏈是有效的。
RFC 7469規範發布時只允許SHA-256算法。HTTP公鑰固定中的哈希算法也可通過RFC 7469規範的附錄A中所提到的命令行或其他第三方工具來生成。
網站維護者可以選擇將特定CA根證書公鑰固定——只有該CA和其簽發的中級證書才視同有效,而且可以選擇將一個或多箇中級證書固定,或將末端證書固定。但是,至少得固定一個備用密鑰以便更換現有的固定密鑰。在沒有備用密鑰(備用密鑰須不在現有證書鏈中)時,HTTP公鑰固定並不會生效。
HTTP公鑰固定在RFC7469規範中成為標準。把證書公鑰的哈希值硬編碼在客戶端、瀏覽器中,這被稱為“證書固定”,HTTP公鑰固定則是“證書固定”的一種擴展。
Chromium瀏覽器現已經禁止固定自簽名根證書的證書鏈,這樣一些內容嗅探、抓包軟體如mitmproxy、Fiddler便無法再利用自簽證書嗅探加密內容。RFC 7469規範指出,對於此類證書鏈,建議禁用HTTP公鑰固定的違規回報。

違規回報

客戶端進行HTTP公鑰固定驗證失敗後,將把此次錯誤詳情以JSON格式回報給report-uri參數中指定的伺服器。若發生客戶端向同域名的伺服器端回報失敗(如違規本身就是由連線問題引起的),伺服器端也可指定另一個域名或採用其他回報服務。

瀏覽器支持

Firefox從版本35.0開始、Chrome從版本46開始支持HPKP(但即將被終止)。IE目前仍不支持,Edge對其的支持尚在官方考慮之中。

套用現狀

2016年,Netcraft在有關SSL的調研中稱,只有0.09%的證書在使用HTTP公鑰固定,加上實際運作中不當的配置,實際有效的HTTP公鑰固定證書數量低於3000。造成這種現象的原因是:該技術尚處於萌芽期,網站技術人員對其缺乏重視和理解,更重要的是,錯誤的部署可能帶來網站方面無法接受的嚴重後果——用戶在相當長一段時間內(取決於max-age的配置)因新證書公鑰與舊HPKP策略不符,對網站的合法訪問都將遭拒。
Google所主導的Certificate Transparency提供了一個用於監測、審核證書的開放式框架,以保障證書籤發流程的安全。這是一項和HTTP公鑰固定有著相同目標的較新項目。
2017年10月,因為網站部署率過低,Google宣布計畫在2018年5月29日發布的Chrome 67中移除對HPKP的支持。

相關詞條

熱門詞條

聯絡我們