大白話詳解HTTPS!

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

HTTPS 是什麼

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

對這裏的 S 就是指 SSL/TLS(就是一種安全加密協議,想深入瞭解的同學可以自行百度),HTTPS 是在 HTTP 的基礎上,利用 SSL/TLS 加密數據包。

我們記住兩個主要目的就行:

  • 對數據加密 

  • 驗證網站服務器身份

HTTPS 怎麼對數據進行加密

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

  • 對稱加密:所謂對稱就是指兩邊一樣 發送方和接收方都用的同一個密鑰,加密解密都是同一個密鑰從始至終只需要保存一個密鑰就行。

  • 非對稱加密:發送方和接收方使用一對密鑰,即公鑰和私鑰。一般私鑰是保密不能被泄露的,公鑰可以對外傳播。我們可以用公鑰加密私鑰解密(數據加密) 也可用私鑰加密公鑰解密(簽名下面會解釋)

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

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

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

  • 客戶端生成會話祕鑰就是我們對稱加密生成的密鑰。

  • 它用公鑰加密之後進行傳遞(這個時候被加密的不是數據  是這個會話祕鑰 等於把鑰匙加密了)  這裏的公鑰就是非對稱加密中的公鑰 他是由服務器傳遞過去的(對外公開)。

  • 服務端用非對稱加密的私鑰去解密 拿到我們的會話祕鑰。

  • 客戶端和服務端都能用同一個會話祕鑰進行加解密了。

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

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

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

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

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

 

數據被篡改怎麼辦

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

兩個關鍵點:

  • Hash 算法計算生成信息摘要

  • 私鑰加密生成數字簽名

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

  • 用服務端的公鑰去解密數字簽名得到消息摘要 (原始未被篡改的)

  • 用 Hash 函數對收到的原文計算生成一個摘要信息 (可能會被篡改的)

如果兩個信息摘要一致,說明數據沒有被篡改。OK,到這裏可能你覺得沒問題了!

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

服務器公鑰被篡改怎麼辦

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

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

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

客戶端怎麼校驗數字證書

步驟如下:

  • 首先瀏覽器讀取證書中的證書所有者、有效期等信息進行一一校驗。

  • 瀏覽器開始查找操作系統中已內置的受信任的證書發佈機構 CA,與服務器發來的證書中的頒發者 CA 比對,用於校驗證書是否爲合法機構頒發。

  • 如果找不到,瀏覽器就會報錯,說明服務器發來的證書是不可信任的。如果找到,那麼瀏覽器就會從操作系統中取出頒發者 CA 的公鑰,然後對服務器發來的證書裏面的簽名進行解密。

  • 瀏覽器使用相同的 Hash 算法根據證書內容計算出信息摘要,將這個計算的值與證書解密的值做對比。

  • 對比結果一致,則證明服務器發來的證書合法,沒有被冒充。此時瀏覽器就可以讀取證書中的公鑰,用於後續加密了。

HTTPS 原理一覽圖如下:

作者:Big shark@LX

出處:https://juejin.im/post/5eb3c6065188255fd54de543

end

最新整理的 2TB 乾貨資源,包括但不限於:Linux運維架構師、大數據、Docker、數據庫、redis、MongoDB、電子書、Java、機器學習、BAT面試精講視頻等。在公衆號對話框回覆「1024 」即可免費獲取!!

推薦閱讀  點擊標題可跳轉

1、硬核乾貨!Redis 分佈式集羣部署實戰

2、太讚了!牆裂推薦這款網頁版 Nginx 配置生成器,好用到爆!

3、爲什麼美國程序員不用加班,而中國程序員就只能996?

4、12800字!SQL 語法速成手冊

5、玩轉小黑框!Terminal 入門到進階使用指南

6、面試官:rm 刪除文件空間就釋放了嗎?

看完本文有收穫,請分享給更多人

關注「民工哥技術之路」加星標,提升IT技能

好文章,分享點贊在看三連哦❤️↓↓↓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章