https簡單解讀

https是什麼?

https即http+SSL,是基於http的一種加密傳輸方式,要了解https,首先就要了解SSL。算法

SSL

SSL是一種加密方式,主要分爲三個部分:加密、數字簽名、認證。瀏覽器

下面咱們主要從這三個部分依次提及:安全

加密

SSL加密是把對稱加密非對稱加密混合起來加密的。服務器

加密和解密雙方使用同一個密鑰的方式叫作對稱加密。這種方式最大問題是怎樣將密鑰傳給對方,所以要保證密鑰傳輸過程當中的安全性,而普通的http請求並不具有安全性,故SSL不單獨使用對稱加密。網絡

非對稱加密解決了數據在網絡上請求的安全問題,該方式裏有兩種密鑰:公有密鑰私有密鑰性能

私有密鑰用於解密,不能隨意發佈,公有密鑰用於加密,能夠隨意發佈,發送密文的一方使用公有密鑰對數據進行加密,對方收到數據後用本身的私有密鑰解密,私鑰不能在網絡上發送,所以沒必要擔憂安全性問題。加密

但以上方式也有侷限性,好比在典型的http請求中,雙方都要對數據進行加密,而私鑰只在一方,另外一方沒有私鑰不能對數據進行解密,而若是雙方都使用非對稱加密,則傳輸效率會很低。spa

那麼如何才能使用在保證安全性和效率的狀況下,客戶端和服務端都能進行加密和解密呢?這正是SSL的加密原理,前面我已經說過SSL是經過非對稱加密和對稱加密實現的,你能夠設想一下如何解決上述問題。圖片

下面咱們簡單說說https中SSL的步驟,首先咱們定義對稱加密的密鑰爲對稱密鑰,非對稱加密的密鑰爲公有密鑰私有密鑰it

  1. 客戶端向服務器發起SSL握手,此時客戶端向服務器發送的報文信息爲:

    • 客戶端支持的SSL版本
    • 客戶端支持的加密算法(包括Hash算法)
    • 客戶端支持的密鑰長度
  2. 服務端收到客戶端的報文後,再向客戶端發送報文信息,此時報文信息爲:

    • 決定使用的SSL版本
    • 決定使用的加密算法(包括Hash算法)
    • 數字證書(包含公有密鑰)
  3. 客戶端經過驗證數字簽名取出數字證書內的公鑰,並生成一個隨機密碼串,該隨機密碼串即爲「對稱密鑰」,之後客戶端和服務器都使用該隨機密碼串和約定的加密算法進行加密和解密。
  4. 客戶端經過公有密鑰「對稱密鑰」進行加密傳輸給服務器
  5. 服務器經過私有密鑰對報文進行解密獲得「對稱密鑰」
  6. 至此雙方都擁有了「對稱密鑰」,之後http通訊都使用對稱加密的方式進行消息傳輸,這樣既保證了安全性,又不會下降性能。

SSL使用以上幾步就解決了http請求的安全問題,看起來很簡單,可是實際的SSL仍有許多步驟來完善上面幾步。

數字簽名

以上加密步驟的四、5步,SSL用了數字簽名機制保證傳輸「對稱密鑰」的一致性,詳細爲:

  1. 客戶端首先將「對稱密鑰」用約定好的Hash算法加密生成一個Digest,將Digest經過公有密鑰加密生成一個Signature。
  2. 客戶端同時發送「對稱密鑰」、Signature到服務端
  3. 服務端收到信息後,用私有密鑰解密Signature得出Digest-1,再將「對稱密鑰」用Hash算法加密生成Digest,比較Digest-1與Digest是否一致,若一致則信息沒有被篡改

從上面步驟能夠看出數字簽名是創建在非對稱加密基礎上的,實際上在SSL的許多過程當中,數字簽名也能夠創建在對稱加密的基礎上。

認證

在以上SSL加密過程當中的第2步,咱們能夠看到服務端向客戶端傳的是數字證書而不是公有密鑰,實際上若是單獨傳輸公有密鑰,客戶端不能肯定該公有密鑰就是服務器傳來的公鑰,所以數字證書機制就是來單獨解決這個問題的。

數字證書,有點像生活中的身份證、護照等,是由一個官方的證書頒發機構(又名CA)簽發的一組數據。這種證書很難僞造,用於使用者的身份證實。

客戶端會對數字證書進行一段認證流程來取出數字證書裏的公有密鑰:

  1. 客戶端經過證書中「證書頒發機構的數字簽名」來驗證證書的來源和完整性。通常客戶端(如瀏覽器)會內置一個受信任的證書頒發機構列表。
  2. 一但認證經過,則取出證書內的公有密鑰用於客戶端與服務器的通訊。

總結

咱們能夠用一張圖來展現整個SSL加密的過程:
圖片描述

相關文章
相關標籤/搜索