Palai

Palai

程序员 | 开源爱好者 | 喜欢交友

數字證書及 CA - 掃盲小記

什麼是數字證書?#

數字證書是一種數字文件,證明用於加密在線資產(即電子郵件通信、文件、網站或軟件應用程序)的公鑰的真實性。

一個數字證書通常包含了:

  • 公鑰;
  • 持有者信息;
  • 證書認證機構(CA)的信息;
  • CA 對這份文件的數字簽名及使用的算法;
  • 證書有效期;
  • 還有一些其他額外信息;

數字證書的作用#

數字證書的作用,是用來認證公鑰持有者的身份,以防止第三方進行冒充。說簡單些,證書就是用來告訴客戶端,該服務端是否是合法的,因為只有證書合法,才代表服務端身份是可信的。

什麼是 CA?#

CA 是 “Certificate Authority” 的縮寫,也叫 “證書授權中心”。它是負責管理和簽發證書的第三方機構,就好比例子裡面的中介 ——C 公司。一般來說,CA 必須是所有行業和所有公眾都信任的、認可的。因此它必須具有足夠的權威性。就好比 A、B 兩公司都必須信任 C 公司,才會找 C 公司作為公章的中介。

什麼是 CA 證書?#

CA 證書,顧名思義,就是 CA 頒發的證書。

人人都可以找工具製作證書。但是你一個小破孩製作出來的證書是沒啥用處的。因為你【不是】權威的 CA 機關,你自己搞的證書不具有權威性。

什麼是證書的信任鏈?#

實際上,證書之間的信任關係,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3...... 這個叫做證書的信任鏈。只要你信任鏈上的頭一個證書,那後續的證書,都是可以信任滴。

什麼是根證書?#

假設 C 證書信任 A 和 B;然後 A 信任 A1 和 A2;B 信任 B1 和 B2。則它們之間,構成如下的一個樹形關係(一個倒立的樹)

image

處於最頂上的樹根位置的那個證書,就是 “根證書”。除了根證書,其它證書都要依靠上一級的證書,來證明自己。根證書是不需要被證明的,根證書是整個證書體系安全的根本。
所以,如果某個證書體系中,根證書出了問題(不再可信了),那麼所有被根證書所信任的其它證書,也就不再可信了。這個後果是相當相當滴嚴重

CA 證書的作用?#

  • 驗證網站是否可信(針對 HTTPS)
  • 驗證某文件是否可信(是否被篡改)

這裡就要提到 HTTPS 了,我們都知道 HTTP 跟 HTPPS 的區別:

  1. HTTP 是明文傳輸的,存在安全風險,HTTPS 在 HTTP 與 TCP 之間加入了 SSL/TLS 安全協議 ,使得報文能夠安全傳輸
  2. HTTP 三次握手之後便可以進行傳輸,而 HTTPS 在 TCP 三次握手之後還需要 SSL/TLS 的握手才能傳輸
  3. HTTP 默認端口是 80 而 HTTPS 默認端口是 443
  4. HTTPS 需要向 CA 申請數字證書 來保證服務器的身份可靠

HTTPS 是加密協議,可以保證你的傳輸過程中,不被偷窺。
但是 HTTPS 就一定是安全的嗎? 假設有假的基站起了轉發全部信息的作用,這樣就獲取了全部的信息啊?

為了防止壞人這麼幹,HTTPS 協議除了有加密的機制,還有一套證書的機制。通過證書來確保,某個站點確實就是某個站點。
有了證書之後,當你的瀏覽器在訪問某個 HTTPS 網站時,會驗證該站點上的 CA 證書(類似於驗證介紹信的公章)。如果瀏覽器發現該證書沒有問題(證書被某個根證書信任、證書上綁定的域名和該網站的域名一致、證書沒有過期),那麼頁面就直接打開;否則的話,瀏覽器會給出一個警告,告訴你該網站的證書存在某某問題,是否繼續訪問該站點?

證書的簽發和驗證流程#

image

CA 簽發證書的過程,如上圖左邊部分:

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

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

  • 首先客戶端會使用同樣的 Hash 算法獲取該證書的 Hash 值 H1;
  • 通常瀏覽器和操作系統中集成了 CA 的公鑰信息,瀏覽器收到證書後可以使用 CA 的公鑰解密 Certificate Signature 內容,得到一個 Hash 值 H2 ;
  • 最後比較 H1 和 H2,如果值相同,則為可信賴的證書,否則則認為證書不可信。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。