8月6號,Let’s Encrypt 官方博客發表了壹篇文章 Let's Encrypt Root Trusted By All Major Root Programs ,其中關鍵信息引用如下:
意思就是本月底,所有的微軟產線(比如 Edge)也將直接信任 Let’s Encrypt 的根證書(ISRG Root X1),從而世界上所有的主流產品都直接支持其根證書了,那麽這意味著什麽?什麽是直接信任?對使用 Let’s Encrypt 的證書的人有何影響?且聽我慢慢道來。
這壹消息表示:
也許妳聽的暈暈乎乎的,為了解明白,我們必須理解證書鏈的概念。
證書鏈是壹個信任鏈,關系見下圖:
以 Let’s Encrypt 簽發的證書為例,申請者申請的證書可以稱為服務器證書,運行 openssl 查看證書命令,關鍵信息如下:
這表示服務器證書是 *.simple,它被中間證書 Let's Encrypt Authority X3 進行數字簽名,也就是說服務器證書被 Authority X3 中間證書信任。
該中間證書就是 Let's Encrypt CA 機構的,用於簽發服務器證書,需要說明的是中間證書可能有多張,叠代簽名。
那麽中間證書被誰簽名了?運行下列命令:
中間證書是被 DST Root CA X3 根證書(IdenTrust CA 機構的根證書)簽名的,同學們可能很奇怪了,為啥 Let's Encrypt 不用自己的根證書簽名其中間證書啊?這是壹個好問題。
根本原因就是 Let's Encrypt 作為壹個新興 CA 機構,歷史並不悠久,大部分瀏覽器不可能直接信任其根證書,不信任就無法構建信任基礎,怎麽辦?Let's Encrypt 為了快速投入運營,使用 IdenTrust CA 機構的根證書(被主流產品直接信任,比如 Chrome 可信任根證書列表包含該根證書)對其中間證書進行 交叉認證 ,從而主流產品就能信任 Let's Encrypt 服務器證書了,最終信任鏈鏈條: 服務器證書>Let's Encrypt Authority X3 中間證書->DST Root CA X3 根證書 。
同學們如果也使用 Let's Encrypt 證書,可以看壹下證書鏈,打開 Chrome 開發者工具就能知曉,如圖:
本質上,Let's Encrypt 有兩條證書鏈(早就存在了)如下圖:
綠色線條就是目前采用的證書鏈,如果主流瀏覽器都信任了 Let's Encrypt 根證書(ISRG Root X1),那麽就可以采用紅色線條標示的證書鏈了。也就是信任鏈鏈條: 服務器證書>Let's Encrypt Authority X3 中間證書->ISRG Root X1 根證書 。
經過我的配置,我的網站證書鏈如下圖:
同學們可能會問,這是如何做到的?別著急。
本質上,Let's Encrypt 中間證書 Authority X3 有兩個證書,分別是:
他們都可以對 Let's Encrypt 服務器證書進行簽名(簽名用的私鑰是壹樣的),這是關鍵,這兩個證書分別被 ISRG Root X1 和 DST Root CA X3 簽名。
聰明的同學可能想到了,在申請 Let's Encrypt 證書的時候,Let's Encrypt 目前使用 Let’s Encrypt Authority X3 (IdenTrust cross-signed) 簽名,申請者獲取到證書後,配置證書鏈(服務器證書+中間證書)後提供 HTTPS 服務。瀏覽器校驗證書,壹看中間證書是 Let’s Encrypt Authority X3 (IdenTrust cross-signed) 簽名,最終找到 IdenTrust 的根證書完成簽名驗證。
那今天博客所說的內容表示,在申請 Let's Encrypt 證書的時候,Let's Encrypt 可以使用 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 簽名,申請者獲取到證書後,配置證書鏈(服務器證書+中間證書)後提供 HTTPS 服務。瀏覽器校驗證書,壹看中間證書是 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 簽名,最終找到 Let's Encrypt ISRG Root X1 根證書完成簽名驗證。
可實際上, 目前 妳申請證書的時候,Let's Encrypt 仍然使用 IdenTrust cross-signed 中間證書簽名服務器證書,原因何在,主流產品(比如 Chrome)雖然已經直接信任其根證書了,但這些產品有很多舊版本存在,如果不更新,那麽這些版本仍然不信任 Let’s Encrypt 根證書,Let’s Encrypt 預估 5 年以後,這些舊版本將不復存在,那個時候 Let’s Encrypt 就可以大膽用 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 中間證書簽發服務器證書了。
難倒我們了嗎?是否可以手動讓妳的網站使用新的證書鏈呢?答案是可以(如果不考慮舊產品線不信任 Let’s Encrypt ISRG Root X1 根證書的問題)。
上面講到,服務器證書可以任意使用下面的中間證書簽名:
任意的關鍵就是,這兩個證書的簽名私鑰是壹樣的,我們是否可以自行配置證書鏈呢(紅色線條)?可以:
然後重新啟動妳的服務器,使用 Chrome 瀏覽器開發者工具觀察網站證書鏈,是不是結果如下圖: