HTTPS握手及數字證書驗證(簡解)

HTTPS通信涉及的通信協議層次模型:

||HTTP||
||SSL/TLS||
||TCP||
||IP||
||Ethernet||


HTTPS通信流程:

  1. 同服務器建立TCP連接;
  2. ssl/tls握手過程;
  3. 採用握手過程client和server確定的對稱祕鑰進行加密通信(對http的報文進行加密)。

 

SSL/TLS握手過程:

  1. client向server發送自己支持的SSL版本/支持的加密算法/隨機數1(用於生成對稱祕鑰);
  2. server回覆使用的SSL版本/用於對稱祕鑰加密交換用的非對稱加密算法/對稱加密算法/MAC算法/隨機數2(用於生成對稱祕鑰)/從CA獲取的數字證書;
  3. client接收並校驗數字證書,生成隨機數3(並集合隨機數1和2生成對稱祕鑰)並用server的公鑰加密後發送給server,併發送change_cippher_spec告知server後面數據交互開始使用對稱祕鑰加密,結束握手;
  4. server採用私鑰解密隨機數3,並結合隨機數1和2生成和client端相同的對稱祕鑰,同樣的發送change_cippher_spec告知client後面數據交互開始使用對稱祕鑰加密,結束握手。

 

數字證書格式:

證書標準規範X.509規定了數字證書的格式。數字證書由CA(Certificate Authority)授權機構頒發,簡單的說數字證書由描述信息,證書申請者的公鑰,以及數字簽名(描述信息和公鑰的HASH指紋,CA採用自己的私鑰加密HASH指紋後得到)組成,也可以看做由明文部分(描述信息和公鑰)和明文的加密部分(數字簽名)組成。

明文部分:
版本號/序列號/簽名算法/頒發者/有效期/主體(公鑰算法,主體公鑰)/頒發者唯一號/主體唯一號/擴展

舉例:一臺HTTPS服務器向CA申請數字證書(當然客戶端也可以申請數字證書並在交互式發送給服務器)

 

數字證書的校驗:

一般校驗方法:

校驗數字證書的有效性(如瀏覽器使用的方法),主要分爲三個部分:

  • 數字證書有效期驗證
  • 根證書驗證(證書鏈驗證)
  • CRL驗證

 

怎樣校驗數字證書?:

1. 有效期驗證:

證書的使用時間要在起始時間和結束時間之內,通過解析證書很容易得到證書的有效期。

2. 根證書驗證:

 先來理解一下什麼是根證書?
        普通的證書一般包括三部分:描述信息,用戶公鑰,以及CA簽名
        那麼我們要驗證這張證書就需要驗證CA簽名的真僞。那麼就需要CA公鑰。而CA公鑰存在於另外一張證書(稱這張證書是對普通證書籤名的證書)中。因此我們又需要驗證這另外一張證書的真僞。因此又需要驗證另另外證書(稱這張證書是對另外一張證書籤名的證書)的真僞。依次往下回溯,就得到一條證書鏈。那麼這張證書鏈從哪裏結束呢?就是在根證書結束(即驗證到根證書結束)。根證書是個很特別的證書,它是CA中心自己給自己簽名的證書(即這張證書是用CA公鑰對這張證書進行簽名)。信任這張證書,就代表信任這張證書下的證書鏈。
        所有用戶在使用自己的證書之前必須先下載根證書。
       所謂根證書驗證就是:用根證書公鑰來驗證該證書的頒發者簽名。所以首先必須要有根證書,並且根證書必須在受信任的證書 列表(即信任域)。

3. CRL驗證:

 CRL是經過CA簽名的證書作廢列表,用於證書凍結和撤銷。一般來說證書中有CRL地址,供HTTP或者LDAP方式訪問,通過解析可得到CRL地址,然後下載CRL進行驗證。
     並且證書中有CRL生效日期以及下次更新的日期,因此CRL是自動更新的,因此會有延遲性。
     於是呢,還有另外一種方式OSCP證書狀態在線查詢,可以即時的查詢證書狀態。

轉自:《證書有效性驗證、根證書

 

證書鎖定技術(SSL Pinning):

  • 數字證書鎖定
  • 公鑰鎖定

爲什麼要採用證書鎖定技術?:

主要是爲了防範中間人攻擊:

如果用戶手機中安裝了一個惡意證書,那麼就可以通過中間人攻擊的方式進行竊聽用戶通信以及修改request(請求)或者response(答覆,響應)中的數據。

1 、客戶端在啓動時,傳輸數據之前需要客戶端與服務端之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。

2 、中間人在此過程中將客戶端請求服務器的握手信息攔截後,模擬客戶端請求給服務器(將自己支持的一套加密規則發送給服務器),服務器會從中選出一組加密算法與HASH算法,並將自己的身份信息以證書的形式發回給客戶端。證書裏面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。

3 、而此時中間人會攔截下服務端返回給客戶端的證書信息,並替換成自己的證書信息。

4、 客戶端得到中間人的response後,會選擇以中間人的證書進行加密數據傳輸。

5 、中間人在得到客戶端的請求數據後,以自己的證書進行解密。

6 、在經過竊聽或者是修改請求數據後,再模擬客戶端加密請求數據傳給服務端。就此完成整個中間人攻擊的過程。

轉自:《證書有效性驗證、根證書

 

1. 數字證書鎖定:

client通過帶外方式獲取server的數字證書,譬如通過email的方式,然後將數字證書嵌入到你的APP中。當連接server時,通過對比從server端接受到的數字證書和APP中內嵌的數字證書是否相同即可判斷連接的安全性;

缺點是:數字證書需要定期輪轉更新,譬如Google每月更新一次,那麼client的APP也需要每月更新一次。

2. 公鑰鎖定:

client從通過帶外方式湖區server的數字證書,並從數字證書中提取出server的公鑰,通過比較公鑰判斷連接的安全性‘

缺點:從數字證書中提取公鑰可能有一點麻煩,另外公鑰也是需要定期輪轉更新的所以client端APP也需要更新(不過公鑰更新的頻率應該比數字證書更新頻率低)。

指紋鎖定:

無論是數字證書鎖定還是公鑰鎖定,都需要將相關信息嵌入到APP中,這樣入侵者可以通過逆向工程(反編譯)竊取到數字證書和公鑰,指紋鎖定是在前兩者的基礎上採用數字證書和公鑰的指紋實現,將其指紋嵌入到APP中,利用指紋的不可逆性來保證數字證書和公鑰的安全。

優點:能夠防止逆向工程竊取有用信息;從獲取數字證書和公鑰的數字指紋一般具有庫API可供使用;可以使用備份指紋,例如GoogleIETF的 websec-key-pinning技術。

參考《Certificate and Public Key Pinning

發佈了13 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章