基礎科普!大白話詳解HTTPS

https.jpg
做者:_Big shark@LX_
出處:https://juejin.im/post/5eb3c6...面試

我相信你們面試的時候對於 HTTPS 這個問題必定不會陌生,可能你只能簡單的說一下與 HTTP 的區別,可是真正的原理是否很清楚呢?他到底如何安全?這一篇讓咱們用大白話來揭開 HTTPS 的神祕面紗吧!算法

HTTPS 是什麼瀏覽器

HTTPS 是什麼?答:HTTPS 不就是 HTTP 後面多加了一個 S 嗎?安全

對這裏的 S 就是指 SSL/TLS(就是一種安全加密協議,想深刻了解的同窗能夠自行百度),HTTPS 是在 HTTP 的基礎上,利用 SSL/TLS 加密數據包。服務器

咱們記住兩個主要目的就行:函數

  • 對數據加密
  • 驗證網站服務器身份

HTTPS 怎麼對數據進行加密post

咱們已經知道 HTTPS 第一個目的是給數據加密,對於數據加密,咱們這裏要談到兩種加密方式:網站

  • 對稱加密:所謂對稱就是指兩邊同樣 發送方和接收方都用的同一個密鑰,加密解密都是同一個密鑰從始至終只須要保存一個密鑰就行。
  • 非對稱加密:發送方和接收方使用一對密鑰,即公鑰和私鑰。通常私鑰是保密不能被泄露的,公鑰能夠對外傳播。咱們能夠用公鑰加密私鑰解密(數據加密) 也可用私鑰加密公鑰解密(簽名下面會解釋)

混合加密:知道了兩種加密方式的優缺點以後,咱們的 HTTPS 就很厲害了,它採用二者混合的加密方式。加密

不是說對稱加密的密鑰不安全嗎?那咱們換一種思路,咱們在傳遞過程把咱們的對稱加密中的密鑰用非對稱加密的方式去傳遞就行了。spa

這句話有點繞,咱們看上圖:

  • 客戶端生成會話祕鑰就是咱們對稱加密生成的密鑰。
  • 它用公鑰加密以後進行傳遞(這個時候被加密的不是數據  是這個會話祕鑰 等於把鑰匙加密了)  這裏的公鑰就是非對稱加密中的公鑰 他是由服務器傳遞過去的(對外公開)。
  • 服務端用非對稱加密的私鑰去解密 拿到咱們的會話祕鑰。
  • 客戶端和服務端都能用同一個會話祕鑰進行加解密了。

就算傳輸過程被攻擊者截取到了被加密的會話祕鑰 他沒有服務器的私鑰是沒法獲得會話祕鑰的。

整個過程巧妙之處就在於以前咱們傳遞的是鑰匙,如今咱們傳遞的是保險箱,鑰匙在保險箱裏面,你就算拿到了保險箱,沒有保險箱的鑰匙也拿不到鑰匙。

HTTPS 怎麼驗證網站服務器身份

HTTPS 第二個目的是對網站服務器進行真實身份認證,那麼這一點又是怎麼作到的呢?

先來看一個問題,上一步咱們已經解決了數據加密的問題,雖然攻擊者沒法解密數據,可是他能夠篡改數據,咱們怎麼知道數據沒被動過呢?

數據被篡改怎麼辦

這個時候就要使用數字簽名了,數字簽名:將原文(部分數據關鍵信息)先用 Hash 函數生成消息摘要,而後用發送者的私鑰加密生成數字簽名,與原文一塊兒傳送給接收者。

兩個關鍵點:

  • Hash 算法計算生成信息摘要
  • 私鑰加密生成數字簽名

客戶端如何校驗數字簽名呢?(利用服務器私鑰加密,公鑰解密)客戶端收到服務器發過來的數字簽名以後:

  • 用服務端的公鑰去解密數字簽名獲得消息摘要 (原始未被篡改的)
  • 用 Hash 函數對收到的原文計算生成一個摘要信息 (可能會被篡改的)

若是兩個信息摘要一致,說明數據沒有被篡改。OK,到這裏可能你以爲沒問題了!

其實最後還有一個很關鍵的點是:咱們剛剛全部的假設都基於客戶端的公鑰是服務器傳遞過來的,那若是攻擊者僞造了服務器的公鑰怎麼辦呢?

服務器公鑰被篡改怎麼辦

這個時候就要使用數字證書了,數字證書認證機構(CA)處於客戶端與服務器雙方均可信賴的第三方機構的立場上。

服務端向 CA 申請數字證書,審覈經過後 CA 會向申請者簽發認證文件-證書,包含如下內容:

拿到數字證書後,服務器傳遞數字證書給客戶端。

客戶端怎麼校驗數字證書

步驟以下:

  • 首先瀏覽器讀取證書中的證書全部者、有效期等信息進行一一校驗。
  • 瀏覽器開始查找操做系統中已內置的受信任的證書發佈機構 CA,與服務器發來的證書中的頒發者 CA 比對,用於校驗證書是否爲合法機構頒發。
  • 若是找不到,瀏覽器就會報錯,說明服務器發來的證書是不可信任的。若是找到,那麼瀏覽器就會從操做系統中取出頒發者 CA 的公鑰,而後對服務器發來的證書裏面的簽名進行解密。
  • 瀏覽器使用相同的 Hash 算法根據證書內容計算出信息摘要,將這個計算的值與證書解密的值作對比。
  • 對比結果一致,則證實服務器發來的證書合法,沒有被冒充。此時瀏覽器就能夠讀取證書中的公鑰,用於後續加密了。

HTTPS 原理一覽圖以下:

相關文章
相關標籤/搜索