PKI(Public Key Infrastructure),一般指公鑰基礎設施,是一個包括硬件、軟件、人員、策略和規(guī)程的集合,用來實現(xiàn)基于公鑰密碼體制的密鑰和證書的產(chǎn)生、管理、存儲、分發(fā)和撤銷等功能。PKI體系是計算機軟硬件、權(quán)威機構(gòu)及應用系統(tǒng)的結(jié)合。本文討論了PKI的弱點,并介紹了兩個對策。
先介紹一下依賴方(relying party)這個術(shù)語,依賴方是指嘗試驗證x.509證書的Web瀏覽器、電子郵件客戶軟件和聊天應用程序等,依賴方多半通過檢查其信任錨中的CA(Certificate Authority,證書頒發(fā)機構(gòu))是否對證書簽名來做到這一點。
通常,我們希望借助依賴方確保證書與正確的服務器進行聯(lián)系,使其全程無欺詐。
然而,互聯(lián)網(wǎng)有數(shù)百個CA獲得我們依賴方的信任,其中一些CA甚至有子CA(Sub CA),能夠?qū)ψC書簽名,并獲得依賴方的信任,所有這些CA都可以為任何有效的域名頒發(fā)證書。因此,任何CA通常都可以為用戶的域頒發(fā)證書,而用戶卻渾然不知。由于依賴方會信任該證書(因為它有可信任的CA簽名),該證書可用于對用戶的域發(fā)動中間人攻擊。
那么如何解決?以下是有助于緩解該問題的兩種技術(shù)。
證書頒發(fā)機構(gòu)授權(quán)(CAA)
來自RFC 8659中DNS證書頒發(fā)機構(gòu)授權(quán)(CAA)資源記錄的摘要:“證書頒發(fā)機構(gòu)授權(quán)(CAA)DNS資源,記錄允許DNS域名持有者指定一個或多個已授權(quán)為該域名頒發(fā)證書的證書頒發(fā)機構(gòu)(CA)。CAA資源記錄允許公共CA實施額外的控制機制,以降低證書意外誤頒發(fā)的風險。”
CAA使域名持有者能夠指定允許哪些CA為我們的域頒發(fā)證書,而CA本身承諾尊重我們的CAA記錄。RFC 8659定義了以下三個屬性:issue含有CA的域作為值,CAA記錄授權(quán)該CA為某個域頒發(fā)證書;issuewild與issue基本相同,但用于通配符證書。如果未設置issuewild,改而使用來自issue的值;iodef含有CAA政策方面有任何問題時要使用的聯(lián)系信息。
不妨看一下以下示例記錄:
example.com.IN CAA 0 issue"letsencrypt.org"
example.com.IN CAA 0 iodef"mailto:webmaster example.com"
上述示例中的第一行意味著,只有CA Let's Encrypt可以為域example.com下的任何主機頒發(fā)證書,任何其他CA不得為該域頒發(fā)證書。第二行提供了一個電子郵件地址,如果有任何問題,用戶可以通過它聯(lián)系證書頒發(fā)機構(gòu)。由于DNS是分層次組織的,因此上述CAA記錄適用于web.example.com以及host.web.example.com和host.sub.web.example.com。
不妨再看另一個例子:
example.com.IN CAA 0 issue"letsencrypt.org"
example.com.IN CAA 0 iodef"mailto:webmaster example.com"
sub.web.example.com IN CAA 0 issue"example-pki.org"
這里,只允許CA example-pki.org為host.sub.web.example.com之類的域頒發(fā)證書,第三行中的記錄覆蓋了來自example.com的策略。當然,CAA資源記錄無法阻止不合規(guī)CA為其無權(quán)頒發(fā)證書的域頒發(fā)證書,但它們可以人為從嵌入的信任錨中移除這些不合規(guī)CA,這意味著在大多數(shù)情況下不合規(guī)CA會難以為繼。另外,還有一種可能性,即授權(quán)的CA將證書誤頒發(fā)給無權(quán)使用證書的人,雖然CAA資源記錄不會帶來百分之百的安全性,但很容易實施并降低證書誤頒發(fā)的風險。
證書透明度(CT)
RFC 6962摘要顯示:“證書透明度是一種實驗性協(xié)議,用于在頒發(fā)或觀察傳輸層安全(TLS)證書時公開記錄它們的存在,又允許任何人審計證書頒發(fā)機構(gòu)(CA)的活動,注意可疑證書的頒發(fā)以及審計證書日志本身。目的是客戶端最終將拒絕接受未出現(xiàn)在日志中的證書,實際上迫使CA將所有已頒發(fā)的證書添加到日志中。”
CT為TLS證書提供了一種記賬形式,使用戶能夠檢查CA為其域名頒發(fā)了哪些證書。為此,用戶可以使用一些服務,比如sslmate提供的Cert Spotter,該服務還有本地版。有人曾在虛擬專用服務器上運行其本地版,但是由于過去兩年日志變長,似乎無法從頭到尾爬取日志。
日志變長表明有許多CA已添加了證書,有專家表示,主要的瀏覽器早晚會開始只信任帶有CT日志條目的證書,并將此作為強制要求。