HTTPS證書生成、驗簽 、證書鏈

HTTPS證書申請原理

1、制作CSR文件

所謂CSR就是由申請人制作的Certificate Secure Request證書請求文件。制作過程中,系統(tǒng)會產(chǎn)生2個密鑰,一個是公鑰就是這個CSR文件,另外一個是私鑰,存放在服務(wù)器上。要制作CSR文件,申請人可以參考WEB SERVER的文檔,一般APACHE等,使用OPENSSL命令行來生成KEY+CSR 2個文件,Tomcat,JBoss,Resin等使用KEYTOOL來生成JKSCSR文件,IIS通過向?qū)Ы⒁粋€掛起的請求和一個CSR文件。

申請證書過程

2、CA認(rèn)證

CSR提交給CA,CA一般有2種認(rèn)證方式:

  • 1)域名認(rèn)證:一般通過對管理員郵箱認(rèn)證的方式,這種方式認(rèn)證速度快,但是簽發(fā)的證書中沒有企業(yè)的名稱;
  • 2)企業(yè)文檔認(rèn)證:需要提供企業(yè)的營業(yè)執(zhí)照。
    也有需要同時認(rèn)證以上2種方式的證書,叫EV ssl證書,這種證書可以使IE7以上的瀏覽器地址欄變成綠色,所以認(rèn)證也最嚴(yán)格。

華為云SSL 證書申請流程

華為云申請證書流程
    1. 登錄管理控制臺。
    1. 單擊頁面左上方的,選擇“安全與合規(guī) > 云證書管理服務(wù)”,進(jìn)入云證書管理界面CCM。
    1. 在左側(cè)導(dǎo)航欄選擇“SSL證書管理”,進(jìn)入SSL證書管理頁面。
    1. 在證書列表左上角,單擊 “創(chuàng)建測試證書”,進(jìn)入創(chuàng)建測試證書對話框界面。 “創(chuàng)建測試證書”按鈕處顯示的數(shù)字表示測試證書剩余可創(chuàng)建數(shù)量和可累計創(chuàng)建總數(shù)量。例如數(shù)字顯示為“13/20”,表示剩余可創(chuàng)建13張測試證書,可累計創(chuàng)建20張測試證書。
證書申請
    1. 閱讀并勾選“我已閱讀并同意《云證書管理服務(wù)(CCM)免責(zé)聲明》”,單擊“確認(rèn)”。
    1. 您在SSL證書列表中可查看到創(chuàng)建成功的免費測試證書。
      申請證書結(jié)果

自簽名證書

創(chuàng)建根證書

(1)創(chuàng)建根證書私鑰

openssl genrsa -out root.key 1024

(2)創(chuàng)建根證書請求文件:

openssl req -new -out root.csr -key root.key

后續(xù)參數(shù)請自行填寫,下面是一個例子:

Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sgw
Locality Name (eg, city) [Default City]:sgw
Organization Name (eg, company) [Default Company Ltd]:shiguiwu
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your servers hostname) []:root
Email Address []:2406749643@qq.com
A challenge password []:
An optional company name []:

(3)創(chuàng)建根證書

openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650

在創(chuàng)建證書請求文件的時候需要注意三點,下面生成服務(wù)器請求文件和客戶端請求文件均要注意這三點:

  • 根證書的Common Name填寫root就可以,所有客戶端服務(wù)器端的證書這個字段需要填寫域名,一定要注意的是,根證書的這個字段和客戶端證書、服務(wù)器端證書不能一樣;
  • 其他所有字段的填寫,根證書、服務(wù)器端證書、客戶端證書需保持一致
  • 最后的密碼可以直接回車跳過。

經(jīng)過上面三個命令行,我們最終可以得到一個簽名有效期為10年的根證書root.crt,后面我們可以用這個根證書去頒發(fā)服務(wù)器證書和客戶端證書。

生成自簽名服務(wù)器端證書

(1)生成服務(wù)器端證書私鑰

openssl genrsa -out server.key 1024

(2) 生成服務(wù)器證書請求文件,過程和注意事項參考根證書,本節(jié)不詳述:

openssl req -new -out server.csr -key server.key

(3) 生成服務(wù)器端公鑰證書:

openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650

經(jīng)過上面的三個命令,可以在當(dāng)前目錄查看,我們得到:

  • server.key:服務(wù)器端的密鑰文件
  • server.crt:有效期十年的服務(wù)器端公鑰證書,使用根證書和服務(wù)器端私鑰文件一起生成

證書驗證過程原理

如下圖圖所示,為數(shù)字證書簽發(fā)和驗證流程:

數(shù)字證書簽發(fā)和驗證流程

當(dāng)服務(wù)端向CA 機構(gòu)申請證書的時候,CA簽發(fā)證書的過程,如上圖左邊部分:

  • 首先 CA會把持有者的公鑰、用途、頒發(fā)者、有效時間等信息打成一個包,然后對這些信息進(jìn)行 Hash 計算,得到一個 Hash 值;
  • 然后 CA 會使用自己的私鑰將該 Hash 值加密,生成Certificate Signature,也就是 CA 對證書做了簽名;
  • 最后將Certificate Signature添加在文件證書上,形成數(shù)字證書;

客戶端校驗服務(wù)端的數(shù)字證書的過程,如上圖右邊部分:

  • 首先客戶端會使用同樣的Hash算法獲取該證書的HashH1;
  • 通常瀏覽器和操作系統(tǒng)中集成了CA的公鑰信息,瀏覽器收到證書后可以使用 CA的公鑰解密 Certificate Signature 內(nèi)容,得到一個 HashH2;
  • 最后比較 H1 和 H2,如果值相同,則為可信賴的證書,否則則認(rèn)為證書不可信。

證書鏈

但事實上,證書的驗證過程中還存在一個證書信任鏈的問題,因為我們向CA申請的證書一般不是根證書簽發(fā)的,而是由中間證書簽發(fā)的,比如百度的證書,從下圖你可以看到,證書的層級有三級:

多級證書

對于這種三級層級關(guān)系的證書的驗證過程如下:

  • 客戶端收到 http://baidu.com 的證書后,發(fā)現(xiàn)這個證書的簽發(fā)者不是根證書,就無法根據(jù)本地已有的根證書中的公鑰去驗證 http://baidu.com證書是否可信。于是,客戶端根據(jù)http://baidu.com 證書中的簽發(fā)者,找到該證書的頒發(fā)機構(gòu)是 “GlobalSign Organization Validation CA - SHA256 - G2”,然后向 CA 請求該中間證書。
  • 請求到證書后發(fā)現(xiàn) “GlobalSign Organization Validation CA - SHA256 - G2” 證書是由 “GlobalSign Root CA” 簽發(fā)的,由于 “GlobalSign Root CA” 沒有再上級簽發(fā)機構(gòu),說明它是根證書,也就是自簽證書。應(yīng)用軟件會檢查此證書有否已預(yù)載于根證書清單上,如果有,則可以利用根證書中的公鑰去驗證 “GlobalSign Organization Validation CA - SHA256 - G2” 證書,如果發(fā)現(xiàn)驗證通過,就認(rèn)為該中間證書是可信的。
  • “GlobalSign Organization Validation CA - SHA256 - G2” 證書被信任后,可以使用 “GlobalSign Organization Validation CA - SHA256 - G2” 證書中的公鑰去驗證 http://baidu.com證書的可信性,如果驗證通過,就可以信任http://baidu.com 證書。

在這四個步驟中,最開始客戶端只信任根證書GlobalSign Root CA證書的,然后 “GlobalSign Root CA” 證書信任 “GlobalSign Organization Validation CA - SHA256 - G2” 證書,而 “GlobalSign Organization Validation CA - SHA256 - G2” 證書又信任http://baidu.com證書,于是客戶端也信任http://baidu.com證書。總括來說,由于用戶信任GlobalSign,所以由GlobalSign所擔(dān)保的 http://baidu.com可以被信任,另外由于用戶信任操作系統(tǒng)或瀏覽器的軟件商,所以由軟件商預(yù)載了根證書的GlobalSign都可被信任。

證書鏈

這樣的一層層地驗證就構(gòu)成了一條信任鏈路,整個證書信任鏈驗證流程如下圖所示:
多個證書

如果你的電腦中毒了,被惡意導(dǎo)入了中間人的根證書,那么在驗證中間人的證書的時候,由于你操作系統(tǒng)信任了中間人的根證書,那么等同于中間人的證書是合法的。
這種情況下,瀏覽器是不會彈出證書存在問題的風(fēng)險提醒的。
這其實也不關(guān)HTTPS的事情,是你電腦中毒了才導(dǎo)致 HTTPS 數(shù)據(jù)被中間人劫持的。
所以,HTTPS協(xié)議本身到目前為止還是沒有任何漏洞的,即使你成功進(jìn)行中間人攻擊,本質(zhì)上是利用了客戶端的漏洞(用戶點擊繼續(xù)訪問或者被惡意導(dǎo)入偽造的根證書),并不是HTTPS不夠安全。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容