版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-HTTP公鑰固定

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

HTTP公鑰固定(英語:HTTP Public Key Pinning,縮寫HPKP)是HTTPS網(wǎng)站防止攻擊者利用數(shù)字證書認(rèn)證機(jī)構(gòu)(CA)錯誤簽發(fā)的證書進(jìn)行中間人攻擊的一種安全機(jī)制,用于預(yù)防CA遭受入侵或其他會造成CA簽發(fā)未授權(quán)證書的情況。采用公鑰固定時,網(wǎng)站會提供已授權(quán)公鑰的哈希列表,指示客戶端在后續(xù)通訊中只接受列表上的公鑰。

工作原理服務(wù)器通過Public-Key-Pins(或Public-Key-Pins-Report-Only用于監(jiān)測)HTTP頭向瀏覽器傳遞HTTP公鑰固定信息。

HTTP公鑰固定將網(wǎng)站X.509證書鏈中的一個SPKI(和至少一個備用密鑰)以pin-sha256方式進(jìn)行哈希,由參數(shù)max-age(單位秒)所指定一段時間,可選參數(shù)includeSubDomains決定是否包含所有子域名,另一個可選參數(shù)report-uri決定是否回報違反HTTP公鑰固定策略的事例。在max-age所指定的時間內(nèi),證書鏈中證書的至少一個公鑰須和固定公鑰相符,這樣客戶端才認(rèn)為該證書鏈?zhǔn)怯行У摹?/p>

RFC 7469規(guī)范發(fā)布時只允許SHA-256算法。HTTP公鑰固定中的哈希算法也可通過RFC 7469規(guī)范的附錄A中所提到的命令行或其他第三方工具來生成。

網(wǎng)站維護(hù)者可以選擇將特定CA根證書公鑰固定——只有該CA和其簽發(fā)的中級證書才視同有效,而且可以選擇將一個或多個中級證書固定,或?qū)⒛┒俗C書固定。但是,至少得固定一個備用密鑰以便更換現(xiàn)有的固定密鑰。在沒有備用密鑰(備用密鑰須不在現(xiàn)有證書鏈中)時,HTTP公鑰固定并不會生效。

HTTP公鑰固定在RFC7469規(guī)范中成為標(biāo)準(zhǔn)。把證書公鑰的哈希值硬編碼在客戶端、瀏覽器中,這被稱為“證書固定”,HTTP公鑰固定則是“證書固定”的一種擴(kuò)展。

Chromium瀏覽器現(xiàn)已經(jīng)禁止固定自簽名根證書的證書鏈,這樣一些內(nèi)容嗅探、抓包軟件如mitmproxy、Fiddler便無法再利用自簽證書嗅探加密內(nèi)容。RFC 7469規(guī)范指出,對于此類證書鏈,建議禁用HTTP公鑰固定的違規(guī)回報。1

違規(guī)回報客戶端進(jìn)行HTTP公鑰固定驗證失敗后,將把此次錯誤詳情以JSON格式回報給report-uri參數(shù)中指定的服務(wù)器。若發(fā)生客戶端向同域名的服務(wù)器端回報失?。ㄈ邕`規(guī)本身就是由連接問題引起的),服務(wù)器端也可指定另一個域名或采用其他回報服務(wù)。

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

應(yīng)用現(xiàn)狀2016年,Netcraft在有關(guān)SSL的調(diào)研中稱,只有0.09%的證書在使用HTTP公鑰固定,加上實際運(yùn)作中不當(dāng)?shù)呐渲?,實際有效的HTTP公鑰固定證書數(shù)量低于3000。造成這種現(xiàn)象的原因是:該技術(shù)尚處于萌芽期,網(wǎng)站技術(shù)人員對其缺乏重視和理解,更重要的是,錯誤的部署可能帶來網(wǎng)站方面無法接受的嚴(yán)重后果——用戶在相當(dāng)長一段時間內(nèi)(取決于max-age的配置)因新證書公鑰與舊HPKP策略不符,對網(wǎng)站的合法訪問都將遭拒。

由Google所主導(dǎo)的Certificate Transparency提供了一個用于監(jiān)測、審核證書的開放式框架,以保障證書簽發(fā)流程的安全。這是一項和HTTP公鑰固定有著相同目標(biāo)的較新項目。

2017年10月,因為網(wǎng)站部署率過低,Google宣布計劃在2018年5月29日發(fā)布的Chrome 67中移除對HPKP的支持。2

本詞條內(nèi)容貢獻(xiàn)者為:

宋春霖 - 副教授 - 江南大學(xué)