HTTPS--CA認證


證書頒發機構(CA, Certificate Authority)是負責發放和管理數字證書的權威機構,並作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。

如何向 CA 申請證書

(當然不是所有的申請流程都如下所述,但原理都是一樣的)
我們需要使用一個 openssl 軟件,在這個軟件中填寫你申請所需的基本信息,如國家、公司、域名、郵箱、非對稱算法等等。讓后我們會得到兩個文本文件。(xxx表示你申請的域名)

xxx.csr 這是需要發給CA機構申請證書用的文件

xxx.key 這是服務器非對稱用的私鑰

  • .csr 文件包含什么?

    該文件解碼后可以看到包含三部分信息:

    1. 域名基本信息
    2. 公鑰,和上面的私鑰是一對
    3. 簽名
  • 解釋 簽名

    簽名的過程:將1、2兩部分信息進行 sha256 散列得到 hash 值,然后通過RSA算法對hash值進行加密,密鑰為上面提到的私鑰。

    簽名的作用:提供給CA校驗該csr文件的有效性。CA收到csr后,使用公鑰解密,然后也將1、2部分信息進行hash,與解密的數據對比,相同則說明數據沒有被篡改過。

    • 為什么要先hash再加密,直接加密不行嗎?

      hash是一種摘要算法,元數據可能很大,直接對非常大的數據加密效率太低,密文也會很大,因此先對要加密的數據進行hash獲取它的摘要信息,有效性是一樣的。

CA 收到申請者的CSR文件后,進行審核,通過后就會下發證書文件。

證書文件

發回的證書可能包含兩個文件:

  1. 申請域名的證書

  2. 證書鏈(包含多個節點,每個節點都是一份證書)

    通常是.pem或.crt后綴的文本文件。

每個證書的內容主要也包含三部分:

  1. 基本信息,如證書頒發機構、有效期、證書申請信息
  2. 公鑰,即服務器非對稱用的公鑰
  3. 簽名,對上面部分進行hash再用 CA 的私鑰加密簽名(也是用於客戶端驗證證書的有效性)

客戶端如何驗證證書?

通常一個證書鏈有多個證書節點,這里我們拿有3個節點的鏈舉例:

  • DST Root CA X3 根證書節點
    • Let's Encrypt Authority X3 中間證書節點
      • xxx.com 申請者自己的證書

證書鏈是環環相扣,由根節點簽發中間節點,中間節點簽發域名證書。

  • 驗證流程:
  1. 客戶端訪問 xxx.com 時,服務器會返回證書鏈;
  2. 客戶端首先判斷 xxx.com 證書是否可信,主要是通過驗證簽名,這里就需要加密這個證書的公鑰。即中間節點的CA公鑰。
  3. 因此去中間節點尋找公鑰,中間節點證書第二部分就是CA的公鑰,但我們還不能保證中間節點證書的有效性,因此還需先對中間節點進行簽名驗證,這時就需要去根節點找公鑰。
  4. 根節點CA包括一些非常權威的CA機構,他們的證書庫通常被內置在操作系統中或瀏覽器中。我們找到根節點的CA公鑰,然后一步步回去驗證下面節點的有效性。都驗證通過了,則該證書有效。客戶端獲得了服務器的公鑰可以進行非對稱加密了。

HTTPS通信大致過程

  1. 建立tcp連接
  2. 開始TSL握手
    1. client hello
    2. server hello
    3. server發送證書、非對稱公鑰
    4. client回傳PreMaster Key
    5. 生成對稱加密密鑰Master Key,結束
  3. 開始對稱加密傳輸

具體流程可看我的博客《抓包觀察TSL1.2握手過程》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM