Https原理淺析

使用RSA算法的SSL握手圖以下:html

圖片描述

步驟以下
  1. Client端請求https鏈接,發送client_random和支持的加密方式算法

  2. 返回證書和server_random(通過Server端私鑰加密)windows

  3. 驗證證書,使用證書中公鑰加密permaster_secret(permaster_secret是一個隨機數)dom

  4. Client端發送permaster_sercret至Server端,server端經過私鑰解密加密

  5. Client端和Server端分別根據client_random、server_random和permaster_secret生成master secretspa


要點1: 第二步中Server端爲什麼傳證書,不直接傳公鑰

防止攻擊者攔截Client端請求,假裝成服務端。即防止出現以下狀況:操作系統

圖片描述

由於私鑰和公鑰誰都能生成,於是Client端沒法確認公鑰是否屬於Server端。數字證書則能夠解決這個問題。server


要點2:數字證書

證書包含的主要內容:htm

  • 證書信息:發佈機構、過時時間和序列號blog

  • 全部者信息

  • 全部者公鑰

數字證書由CA(certificate authority)頒發,其做用是保證數字證書裏的公鑰確實是這個證書的全部者。但數字證書一樣是能夠僞造的,如何保證這一點呢?這時就須要引入數字簽名。


要點3:數字簽名

數字簽名介紹

客戶端驗證CA簽名過程以下:

圖片描述

這個過程的第二步,CA的公鑰從何而來呢?答案是從操做系統中來。CA的數量並很少,於是能夠內置在操做系統中。事實上操做系統中存儲的是CA的根證書,根證書中會有CA的公鑰,以https協議通訊時,Server端會發送證書鏈給Client端。即CA也分層級,下一級CA的真實性由上一級CA來保證(使用上一級CA的私鑰簽名)。而根CA的真實性由誰保證?答案顯然是操做系統。Windows發行版會內置世界上幾個大的根證書機構的證書,即便用正版windows,理論上就已經得到了可信的根證書。

此時Client端、Server端、CA之間的關係以下:

圖片描述

Client信任CA,CA信任Server(否則就不頒發證書了),使得Client信任Server,此時信任鏈造成。


最後還有一個問題,若是黑客只是想搗亂,把每次Client端發來的數據修改一遍再轉發給Server端,或是把Server端發來的數據修改一遍再回給Client端,該如何處理?解決的方法跟數字簽名很像,即對發送的信息內容作hash獲得hash值,而後將信息內容和hash值一塊兒加密發送。對端在解密後,對收到的信息內容以一樣的hash算法作hash計算,若是獲得的hash值相同,則數據未被修改。

相關文章
相關標籤/搜索