[譯] 通俗易懂的 HTTPS 解釋
我們在網路的行為(例如看文章、購物、上傳圖片),簡單來說都是向伺服器傳送訊息、接收伺服器的訊息,這個過程很像 信鴿傳書 。
為了更加形象,我們把通訊過程中的主要角色 伺服器、客戶端、黑客 的稱呼也替換一下, Alice、Bob、Mallory 。
如果 Alice 想給 Bob 傳送資訊,那麼她就把信綁在信鴿腿上,放出信鴿,Bob 接到信鴿,拿到信紙讀訊息,這個過程就完成了,很不錯,簡單方便。
但是,壞人 Mallory 出現了,他把正在愉快飛翔的信鴿抓了下來,並把信給換了,這就麻煩了,Bob 得到了假訊息。
這就是 HTTP 的溝通方式,方便但極不安全,不能傳遞重要資訊。
Alice 和 Bob 很聰明,想到了一個好辦法,他們設定了一套編碼規則:把字母偏移3個位置,例如,D → A、E → B、F → C,這樣,原本的訊息“secret message” 就變成了 “pbzobq jbppxdb”。
Mallory 截獲到訊息後就會一臉懵逼,看不懂改不了,但是 Bob 知道解碼規則,可以輕鬆轉化成原文。
這個方式就是“對稱式加密”。
對稱式加密很安全,只要保護好key,別讓其他人知道即可,但也有個問題,如果 Alice 和 Bob 在通訊之前不認識,他們就沒辦法設定加密規則。
為了解決這個問題,通訊方式又一次升級了,比如 Bob 向給 Alice 傳送資訊,他們的通訊流程如下:
-
Bob 讓信鴿飛到 Alice 那兒,但啥也沒帶,沒有信息。
-
Alice 讓信鴿帶著一個箱子和一把開著的鎖飛回到 Bob,Alice 自己留著鎖的鑰匙。
-
Bob 把信放到箱子裡,並用鎖把箱子鎖上,讓信鴿把箱子帶給 Alice。
-
Alice 收到箱子,用鑰匙開鎖,拿到信
這樣 Mallory 就沒招兒了,Alice 和 Bob 可以愉快的通訊了。
這個方式就是“非對稱加密”,這個 箱子 就是 公鑰 , 開鎖的鑰匙 就是 私鑰 。
細想一下,有個問題,Bob 怎麼確認箱子來自 Alice 而不是 Mallory 呢?為此,Alice 決定給箱子籤個名,Bob 收到後先檢查一下簽名就可以確認了。
但這樣還不夠穩妥,Alice 決定讓最權威的 Ted 來簽名,Ted 是幹啥的?他非常有名望,是個絕對值得信賴的傢伙,他的簽名大家都認,Ted 就是大名鼎鼎的 CA (Certification Authority)。
Alice 與 Ted 建立了合作,Ted 收到 Alice 的請求就會為她簽名,而 Mallory 是得不到 Tex 給 Alice 的簽名的,這樣 Bob 就可以放心了。
這就是 HTTPS 的通訊原理了,是不是很好理解。
我們可以看到 HTTPS 比 HTTP 的流程重了很多,有個箱子,還有簽名,還增加了往返過程,效能肯定有所影響,這一切都是為了安全,所以我們要根據自己的需求場景來選擇什麼時候使用 HTTPS,什麼時候使用 HTTP。
本文翻譯整理自:
https://medium.freecodecamp.org/https-explained-with-carrier-pigeons-7029d2193351