8月6號粉楚,Let’s Encrypt 官方博客發(fā)表了一篇文章Let's Encrypt Root Trusted By All Major Root Programs亮垫,其中關(guān)鍵信息引用如下:
As of the end of July 2018, the Let’s Encrypt root, ISRG Root X1, is directly trusted by Microsoft products. Our root is now trusted by all major root programs, including Microsoft, Google, Apple, Mozilla, Oracle, and Blackberry
意思就是本月底饮潦,所有的微軟產(chǎn)線(比如 Edge)也將直接信任 Let’s Encrypt 的根證書(ISRG Root X1)携狭,從而世界上所有的主流產(chǎn)品都直接支持其根證書了逛腿,那么這意味著什么?什么是直接信任单默?對使用 Let’s Encrypt 的證書的人有何影響搁廓?且聽我慢慢道來。
意義
這一消息表示:
- Let’s Encrypt 成為了頂級 CA 機(jī)構(gòu)蝙场,擺脫了二級 CA 機(jī)構(gòu)的身份粱年。
- 代表主流產(chǎn)品對 Let’s Encrypt 的認(rèn)可台诗,進(jìn)一步突顯了他的權(quán)威性。
也許你聽的暈暈乎乎的嗜憔,為了解明白氏仗,我們必須理解證書鏈的概念夺鲜。
證書鏈
證書鏈?zhǔn)且粋€信任鏈呐舔,關(guān)系見下圖:
以 Let’s Encrypt 簽發(fā)的證書為例珊拼,申請者申請的證書可以稱為服務(wù)器證書,運(yùn)行 openssl 查看證書命令仅胞,關(guān)鍵信息如下:
$ openssl x509 -text -in cert1.pem -noout
Issuer: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Subject: CN = *.simplehttps.com
這表示服務(wù)器證書是 *.simplehttps.com剑辫,它被中間證書 Let's Encrypt Authority X3 進(jìn)行數(shù)字簽名妹蔽,也就是說服務(wù)器證書被 Authority X3 中間證書信任。
該中間證書就是 Let's Encrypt CA 機(jī)構(gòu)的编整,用于簽發(fā)服務(wù)器證書乳丰,需要說明的是中間證書可能有多張产园,迭代簽名。
那么中間證書被誰簽名了断箫?運(yùn)行下列命令:
$ openssl x509 -text -in chain1.pem -noout
Issuer: O = Digital Signature Trust Co., CN = DST Root CA X3
Subject: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
中間證書是被 DST Root CA X3 根證書(IdenTrust CA 機(jī)構(gòu)的根證書)簽名的秋冰,同學(xué)們可能很奇怪了剑勾,為啥 Let's Encrypt 不用自己的根證書簽名其中間證書啊暂刘?這是一個好問題捂刺。
根本原因就是 Let's Encrypt 作為一個新興 CA 機(jī)構(gòu),歷史并不悠久森缠,大部分瀏覽器不可能直接信任其根證書贵涵,不信任就無法構(gòu)建信任基礎(chǔ),怎么辦瓷马?Let's Encrypt 為了快速投入運(yùn)營跨晴,使用 IdenTrust CA 機(jī)構(gòu)的根證書(被主流產(chǎn)品直接信任坟奥,比如 Chrome 可信任根證書列表包含該根證書)對其中間證書進(jìn)行交叉認(rèn)證拇厢,從而主流產(chǎn)品就能信任 Let's Encrypt 服務(wù)器證書了孝偎,最終信任鏈鏈條:服務(wù)器證書>Let's Encrypt Authority X3 中間證書->DST Root CA X3 根證書。
同學(xué)們?nèi)绻彩褂?Let's Encrypt 證書寺旺,可以看一下證書鏈势决,打開 Chrome 開發(fā)者工具就能知曉果复,如圖:
Let's Encrypt 有二條證書鏈
本質(zhì)上,Let's Encrypt 有兩條證書鏈(早就存在了)如下圖:
綠色線條就是目前采用的證書鏈走搁,如果主流瀏覽器都信任了 Let's Encrypt 根證書(ISRG Root X1)私植,那么就可以采用紅色線條標(biāo)示的證書鏈了车酣。也就是信任鏈鏈條:服務(wù)器證書>Let's Encrypt Authority X3 中間證書->ISRG Root X1 根證書。
經(jīng)過我的配置者春,我的網(wǎng)站證書鏈如下圖:
同學(xué)們可能會問清女,這是如何做到的嫡丙?別著急。
使用新的證書鏈
本質(zhì)上拥刻,Let's Encrypt 中間證書 Authority X3 有兩個證書父泳,分別是:
- Let’s Encrypt Authority X3 (IdenTrust cross-signed)
- Let’s Encrypt Authority X3 (Signed by ISRG Root X1)
他們都可以對 Let's Encrypt 服務(wù)器證書進(jìn)行簽名(簽名用的私鑰是一樣的)般哼,這是關(guān)鍵,這兩個證書分別被 ISRG Root X1 和 DST Root CA X3 簽名惠窄。
聰明的同學(xué)可能想到了蒸眠,在申請 Let's Encrypt 證書的時候,Let's Encrypt 目前使用 Let’s Encrypt Authority X3 (IdenTrust cross-signed) 簽名杆融,申請者獲取到證書后楞卡,配置證書鏈(服務(wù)器證書+中間證書)后提供 HTTPS 服務(wù)。瀏覽器校驗證書脾歇,一看中間證書是 Let’s Encrypt Authority X3 (IdenTrust cross-signed) 簽名蒋腮,最終找到 IdenTrust 的根證書完成簽名驗證。
那今天博客所說的內(nèi)容表示藕各,在申請 Let's Encrypt 證書的時候,Let's Encrypt 可以使用 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 簽名激况,申請者獲取到證書后险绘,配置證書鏈(服務(wù)器證書+中間證書)后提供 HTTPS 服務(wù)。瀏覽器校驗證書誉碴,一看中間證書是 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 簽名宦棺,最終找到 Let's Encrypt ISRG Root X1 根證書完成簽名驗證。
可實際上黔帕,目前你申請證書的時候代咸,Let's Encrypt 仍然使用 IdenTrust cross-signed 中間證書簽名服務(wù)器證書,原因何在成黄,主流產(chǎn)品(比如 Chrome)雖然已經(jīng)直接信任其根證書了呐芥,但這些產(chǎn)品有很多舊版本存在逻杖,如果不更新,那么這些版本仍然不信任 Let’s Encrypt 根證書思瘟,Let’s Encrypt 預(yù)估 5 年以后荸百,這些舊版本將不復(fù)存在,那個時候 Let’s Encrypt 就可以大膽用 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 中間證書簽發(fā)服務(wù)器證書了滨攻。
難倒我們了嗎够话?是否可以手動讓你的網(wǎng)站使用新的證書鏈呢?答案是可以(如果不考慮舊產(chǎn)品線不信任 Let’s Encrypt ISRG Root X1 根證書的問題)光绕。
上面講到女嘲,服務(wù)器證書可以任意使用下面的中間證書簽名:
- Let’s Encrypt Authority X3 (IdenTrust cross-signed),綠色線條
- Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 诞帐,紅色線條
任意的關(guān)鍵就是欣尼,這兩個證書的簽名私鑰是一樣的,我們是否可以自行配置證書鏈呢(紅色線條)停蕉?可以:
# 下載 Authority X3 (Signed by ISRG Root X1) 中間證書
$ wget "https://letsencrypt.org/certs/letsencryptauthorityx3.pem.txt"
# 生成新的證書鏈愕鼓,包括服務(wù)器證書+中間證書
$ cp cert1.pem letsencryptauthorityx3.pem.txt > fullchain1.pem
然后重新啟動你的服務(wù)器,使用 Chrome 瀏覽器開發(fā)者工具觀察網(wǎng)站證書鏈慧起,是不是結(jié)果如下圖:
我最近寫了一本書《深入淺出HTTPS:從原理到實戰(zhàn)》菇晃,歡迎去各大電商購買,也歡迎關(guān)注我的公眾號(yudadanwx完慧,虞大膽的嘰嘰喳喳)谋旦,了解我最新的博文剩失,未來可能就不在簡書發(fā)文了屈尼。