我畫了13張圖,用最通俗易懂的話講HTTPS,拿下!

Sunshine_Lin發表於2021-12-21

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心。

相信大家平時肯定經常跟 HTTPS 打交道,比如 請求介面、訪問網站 等等。。那我們也會經常思考:

  • HTTPS 是啥?
  • HTTPS 跟HTTP是什麼關係呢?
  • 為什麼現在的網站都是 HTTPS 而不是 HTTP 呢?

HTTPS 是啥啊?

HTTPS 其實就是 HTTP + SSL/TLS ,至於什麼是 HTTP ,這不在今天我們們的討論範圍內,而什麼是 SSL/TLS 呢?其實就是 SSL或TLS ,這兩個都是 加密安全協議 ,而 SSL TLS 的前身,現在大部分瀏覽器都不支援 SSL 了,所以現在 TLS 用的比較廣泛,但因為 SSL 名氣比較大,所以還是統稱 SSL/TLS 。那為啥要用 HTTPS 呀,因為 HTTP 是明文傳輸,不安全,而 HTTP + SSL/TLS 比較安全,也就是 HTTPS 比較安全

對稱加密

是什麼?

什麼是 對稱加密 呢?我舉個例子,你跟你女朋友聊天,不想讓別人知道你們在聊什麼,所以你跟你女朋友約定好:雙方傳送的訊息都是倒序的,收到對方的訊息後,需要倒序一下才能看到真正的訊息:

截圖2021-12-15 下午9.34.27.png
這個所謂的 約定 ,其實就相當於雙方各自的一把相同的 鑰匙 ,只有這把 鑰匙 才能知道雙方之間傳送的訊息到底是什麼,由於雙方的 鑰匙 是一樣的,所以也稱為 對稱加密

截圖2021-12-15 下午9.41.55.png

缺點?

一開始,雙方肯定要協商這把 鑰匙(祕鑰) 到底應該是什麼樣,而這個過程可能會被黑客監聽到,一旦有第三個人知道這把 鑰匙 ,那麼你們兩的資訊,很容易被中途被黑客被破解,並偽造資訊,這樣的話,那對方可能收不到你的資訊,收到的是黑客偽造的資訊,比如下方例子,你發的是 哈哈哈哈哈哈 ,對方收到的確是 嘻嘻嘻

截圖2021-12-15 下午9.53.02.png

非對稱加密

公鑰和私鑰

現在,在服務端,生成兩個鑰匙 鑰匙A、鑰匙B ,並且這兩把鑰匙之間是有聯絡的: 鑰匙A 加密的東西只能使用 鑰匙B 來解密,然後服務端把這把 鑰匙A 發給客戶端,每次客戶端發資訊都需要使用 鑰匙A 進行加密,然後發到服務端,服務端再用 鑰匙B 進行解密,得到客戶端發來的資訊:

截圖2021-12-15 下午9.53.02.png

其實這裡, 鑰匙A 就是 公鑰 ,因為客戶端、服務端都知道,而 鑰匙B 就是 私鑰 ,因為從始至終, 鑰匙B 都在服務端處,非常安全

非對稱加密

非對稱加密 就是基於 公鑰、私鑰 的一種加密方式, 非對稱加密 相比於 對稱加密 安全性較強,因為黑客只可能知道 公鑰 ,而不可能知道 私鑰 ,而 公鑰 加密的資料只能使用 私鑰 解密,所以黑客盜取 公鑰 後也解密不了客戶端發給客戶端的資訊

截圖2021-12-15 下午10.46.41.png

缺點

我們們剛剛說了 非對稱加密 相比於 對稱加密 安全性較強,但 非對稱加密 也是有缺點的。我們們說了,一開始服務端生成了 公鑰、祕鑰 ,然後把 公鑰 發給客戶端,而 私鑰 一直放在服務端。那麼在把 公鑰 傳給客戶端的過程,可能會被黑客攔截獲取到這個 公鑰 ,並且黑客偽造了 黑客版公鑰、黑客版私鑰 ,並且把 黑客版公鑰 發給客戶端,客戶端是不知情的,傳資料時用 黑客版公鑰 加密資料併傳送,此時黑客只需要用 黑客版私鑰 解密得到客戶端傳送的資訊,並且偽造自己的 黑客資訊 ,並使用原本的 公鑰 加密,再發給服務端,服務端再使用原本 私鑰 進行解密,得到 黑客資訊

1639640259(1).png

HTTPS是哪種加密?

其實 HTTPS 是使用 對稱加密 + 非對稱加密 ,我們們繼續往下看吧!

證書

我們剛剛說了 非對稱加密 也是有缺點的,那怎麼預防這個缺點呢?這個時候我們就需要向 證書頒發機構(CA) 申請 證書

證書的組成

1639625257(1).jpg

步驟

1、服務端將 公鑰 發給 證書頒發機構 ,向 證書頒發機構 申請證書

787994d868d0ad9c029b9aeb423aaf2.png

2、 證書頒發機構 自己也擁有一對 公鑰、祕鑰 ,使用 公鑰 加密了 key1 ,同時根據服務端網址生成一個 證書籤名 ,且也使用 祕鑰 加密這個 證書籤名 。並製作成 證書 ,將此 證書 傳送給服務端

749a16a75da14a1cc134738ed776039.png

3、當客戶端與服務端通訊時,服務端不再是直接把 服務端公鑰 傳給客戶端,而是將剛剛的 證書 傳給客戶端

232dd0696ae794f7072ab3b57dfead4.png

4、當客戶端收到 證書 後,會對此 證書 進行辨別真偽。提前說明一下:當今的瀏覽器對各大證書頒發機構的名稱和對應的機構公鑰都進行了儲存。所以客戶端收到 證書 後,只需要從瀏覽器本地找到對應的 機構公鑰 ,對 證書籤名 進行解密,然後客戶端根據這個解密後的 簽名規則 ,自己也生成一個 證書籤名 ,如果兩個 簽名 一致,則通過。通過之後,客戶端再次使用 機構公鑰 解密出 服務端公鑰key1

140b1c46771bc76b1a0e21b7701da90.png

5、客戶端自己生成一個 對稱祕鑰key2 ,然後使用手上已有的 服務端公鑰key1 key2 進行加密,併傳送給服務端,服務端收到之後,使用 服務端祕鑰 進行解密,這個時候,客戶端和服務端就同時擁有 對稱祕鑰key2

5407c87cdee0af9ee3bfbe0afa471ff.png

6、從這之後,客戶端和服務端就通過 對稱祕鑰key2 來進行對稱加密的通訊,也就是回到了之前第一個場景,你跟你女朋友使用 倒序演算法 進行加密通話,只不過這個 倒序演算法 證書 的保證下,不會被第三方黑客所知道了,只要你跟你女朋友,以及 證書頒發機構 知道:

截圖2021-12-15 下午9.41.55.png

證書會被攔截嗎?

其實就算 證書 被攔截了也沒用,因為 證書 中的 簽名 是根據服務端網址生成的,且使用 證書頒發機構 祕鑰 進行加密的,是無法篡改的。或者黑客直接造個假證書發給客戶端,但這也是沒用的,畢竟瀏覽器早就維護了合法的 證書頒發機構 的合集,黑客可不在這個合集裡哦~

SSL/TLS

之前說了 HTTPS = HTTP + SSL/TLS ,而上述所說的一系列操作,就是發生在 SSL層

image.png

注:最新推出的TLS協議,是SSL 3.0協議的升級版,和SSL協議的大體原理是相同的。

參考

結語

我是林三心,一個熱心的前端菜鳥程式設計師。如果你上進,喜歡前端,想學習前端,那我們們可以交朋友,一起摸魚哈哈,摸魚群

image.png

相關文章