前端三十|28. [WEB] HTTP 和 HTTPS 的差別是什麼?

Schaos
Schaos’s Blog
Published in
7 min readOct 13, 2019

--

相信大多數的讀者,對這個畫面應該都不陌生吧?當前最熱門的瀏覽器 Google Chrome 從 Chrome 69 開始,會在網站使用 HTTP 作為傳輸協定時,在網址列提示使用者「不安全」,甚至出現上圖的提示畫面,藉此來要求網站開發者盡快將網站轉為透過 HTTPS 傳輸資料,甚至 在今年底的 Chrome 79,將會逐步封鎖 HTTPS 網頁中以 HTTP 下載的內容;但 HTTP 與 HTTPS 的差別到底是什麼?HTTPS 又是如何讓資料傳遞變安全的呢?

本系列文已經重新編校彙整編輯成冊,並正式出版囉!

前端三十:從 HTML 到瀏覽器渲染的前端開發者必備心法好評販售中!

喜歡我文章內容的讀者們,歡迎您前往購買支持

HTTP 的資料傳輸

HTTP 全名是 超文本傳輸協定(HyperText Transfer Protocol),內容只規範了客戶端請求與伺服器回應的標準,實際上是藉由 TCP 作為資料的傳輸方式。

更多 TCP 的傳輸協議內容及詳細的過程可以參考 這篇文章

例如使用者送出了一個請求,經過 TCP 的三次握手之後,資料便能透過 TCP 傳遞給伺服器,並等待伺服器回應;然而這個一來一往的傳輸過程,資料都是 明文;如果傳遞的過程中有惡意竊聽者,資料便有機會被窺探、盜用。

什麼?你說沒有人會這麼無聊?其實非常多。像是 惡意使用者偽裝成公用無線網路來釣魚,當使用者連上之後,便可以擷取封包,窺探傳輸的內容;再說,即使扣除掉這種不知名的免費無線網路,你也沒辦法確認網路連線到目標伺服器的路上,每個節點都不會窺探、側錄你所傳遞的資料。

傳遞的內容不加密,就有如在網路上裸奔一樣;為了避免這些事情,我們需要把資料加密。

加密

加密 指的是把明文資料轉換成無法讀取的內容 — 密文,並且密文能藉由特定的解密過程,將其回復成明文。

讓部分開發者時常混淆在一起的是 雜湊,可以參考 這一篇

共用金鑰加密

像是可能大家都有聽過的 凱薩加密法,就是一個非常基本的加密方式:將明文的字母全部位移固定的距離,解密時再位移回來;例如明文是 「EGG」,位移距離(金鑰)為 3,那麼加密後的密文就會是「HJJ」。

當然,真實的環境不會用這種很容易被解出來的加密方式,而是會透過例如 AES 等方式進行加密;但兩者同樣的是,都會透過同一個金鑰來進行加密與解密,因此我們把這類的加密方式稱為「共用金鑰加密」,或是「對稱式加密」。

--

--