HTTPS是如何保障數據傳輸安全的

須要對密碼學簡單認識一下

什麼是對稱加密、非對稱加密、單向散列、消息認證碼、數字簽名、證書、PKI體系算法

信息安全瀏覽器

  • 機密性:信息是否被泄漏。使用對稱加密、非對稱加密來保證
  • 完整性:信息是否被修改,使用單向散列、消息認證碼、數字簽名來保證
  • 真實性:發送者是否冒名頂替的。使用消息認證碼、數字簽名來保證
  • 不能否認性:作過了會不會抵賴。使用數字簽名來保證

對稱加密

實現信息安全的機密性,那麼可使用對稱加密安全

什麼是對稱加密:服務器

  • 使用同一個密鑰進行加密解密,算法速度快。
  • 對稱加密常見的算法是DES和AES。
  • 對稱加密算法經常使用來加密大量內容。

對稱加密.png

非對稱加密

實現信息安全的機密性,那麼可使用非對稱加密markdown

什麼是非對稱加密:併發

  • 擁有倆個密鑰:公鑰和私鑰,公鑰公開的給別人,私鑰本身保存着。
  • 公鑰加密後的密文可使用私鑰來解密
  • 私鑰加密後的密文可使用公鑰來解密
  • 對比與 對稱加密要慢上許多
  • 常見的非對稱算法是RSA

非對稱加密.png

使用非對稱加密算法能夠直接加密信息。好比小明生成本身的密鑰時,把公鑰對外公開。小紅想向小明傳輸信息可以使用小明的公鑰對消息加密後再發送,而後小明收到後能夠用本身的私鑰來解密。其餘人即時獲得加密後的信息也沒法破解。svn

不過這樣使用開銷很大,通常現實中使用對稱加密來加密原始消息,使用非對稱加密來傳輸用來加密消息的對稱密鑰,(用非對稱加密來加密對稱加密的密鑰。)函數

單向散列(hash)

能夠用單向散列來證實數據的完整性flex

不定長的數經散發處理後會壓縮成固定長度。其特色是相同的輸入必定有相同的輸出,不一樣的輸入幾乎沒有相同的輸出,根據輸出沒法還原輸入。網站

場景舉例:咱們再網站上對外公佈了一個10Gb大小的資源連接和對應的sha256哈希值。用戶從第三方下載到相似資源後能夠作sha256散列運算,若是計算的哈希值和咱們原始資源的哈希值相同,就表示數據是真實完整的

常見的散列算法有:MD5(不安全)、SHA一、SHA256

消息認證碼(hmac)

消息認證碼就是帶密鑰的散列函數

特色:

  1. 大量信息通過處理變成短小固定長度值(有點相似單向散列)
  2. 消息不一樣或者密鑰不一樣會致使結果不一樣
  3. 沒法從結果「解密」出原始信息

消息認證碼.png

toekn = header(算法名)+ '.' + payload(有用信息) + '.' + hmac(header + '.' + patload,密鑰)

使用場景:JWT鑑權使用的token就用到了消息認證碼。當服務器把token發送給客戶端,客戶端下次請求時要帶上token,服務器收到token後會截取 header + '.' + payload 作hmac運算,獲得的結果和token的第三部分即hmac作對比。

數字簽名

小明使用私鑰對消息加密即簽名,其餘人使用小明的公鑰若是能解密表示消息必定是小明發的。

簽名能防止抵賴的發生,用來保證信息的不能否認性

數字簽名.png

證書與PKI體系

一個證書上包含一些公開的明文信息以及證書頒發者對該信息的簽名(私鑰加密)。任何人想驗證證書信息的真僞,只須要用證書頒發者的公鑰對簽名進行解密,再和證書上的明文信息作對比便可。

image.png

HTTPS是如何作密鑰協商的

什麼是HTTPS

HTTPS是超文本傳輸安全協議,在HTTP的基礎上經過傳輸加密和身份認證保證了傳輸過程的安全性。

HTTPS = HTTP + SSL

HTTP與HTTPS的區別

  • HTTP的url是 http:// 開頭 , HTTPS的url是 https:// 開頭。
  • HTTP使用 80 端口 , HTTPS使用 443 端口。
  • HTTP數據傳是明文傳輸,不安全。 HTTPS數據加密了,可保證數據私密性、完整性、防止中間人攻擊。

SSL/TLS協議流程(HTTPS握手過程)

詳細流程:

  1. 瀏覽器將本身支持的一套加密算法發給服務器,同時發一個瀏覽器隨機數
  2. 服務器向瀏覽器發送選擇的加密算法、服務器生成的隨機數、服務器數字證書
  3. 瀏覽器收到證書後對證書的CA簽名進行驗證,若是驗證經過,會從證書中拿到服務器的公鑰。
  4. 瀏覽器對瀏覽器隨機數+服務器隨機數進行處理,生成預備主密碼。
  5. 瀏覽器使用服務器的公鑰對預備主密碼進行加密,發給服務器。
  6. 服務器收到後使用本身的私鑰解密出預備主密鑰。
  7. 瀏覽器和服務器分別使用預備主密鑰和倆個隨機數,生成共享主密鑰。
  8. 兩者使用共享主密鑰,使用對稱加密算法加密數據。

簡單的來講:

  1. 瀏覽器使用HTTPS的url訪問服務器與服務器創建SSL鏈接。
  2. 服務器收到請求行,會發送包含公鑰的證書
  3. 瀏覽器使用公鑰加密對稱密鑰併發送給服務器
  4. 服務器使用私鑰解密對稱密鑰
相關文章
相關標籤/搜索