HTTP 請求和回應以純文字形式傳送,這意味著任何人都可以閱讀它們。HTTPS 透過使用 SSL 加密來解決這一問題。
閱讀本文後,您將能夠:
複製文章連結
HTTPS 是支援加密和驗證的 HTTP。兩種通訊協定的唯一區別是HTTPS 使用 TLS (SSL) 來加密普通的 HTTP 請求和回應,並對這些請求和回應進行數位簽名。因此,HTTPS 比 HTTP 安全得多。使用 HTTP 的網站的 URL 中帶有 http://,而使用 HTTPS 的網站則帶有 https://。
HTTP 代表超文字傳輸通訊協定,它是一種用於透過網路傳輸資料的通訊協定,或是一種表示資訊的規範順序和語法。透過網際網路傳送的大多數資訊(包括網站內容和 API 呼叫)都使用 HTTP 通訊協定。HTTP 訊息主要有兩種:請求和回應。
在 OSI 模型中(請參閱什麼是 OSI 模型?),HTTP 是第 7 層通訊協定。
使用者與瀏覽器互動時,使用者瀏覽器會產生 HTTP 請求。例如,如果使用者點擊一個超連結,瀏覽器將針對該頁面上出現的內容傳送一系列「HTTP GET」請求。如果有人在 Google 中搜尋「什麼是 HTTP?」,那麼本文會出現在搜尋結果中,當他們點擊其連結時,瀏覽器將建立並傳送一系列 HTTP 請求以獲取呈現頁面所需的資訊。
這些 HTTP 請求全部傳送到來源伺服器或代理快取伺服器,並且伺服器將產生 HTTP 回應。HTTP 回應是對 HTTP 請求的回答。
簡單來說,HTTP 請求是遵循 HTTP 通訊協定的一系列文字行。GET 請求可能如下所示:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
使用者瀏覽器產生的這部分文字將透過網際網路傳送。而問題在於,它是純文字形式傳送的,監視連線的任何人都能讀取它。(不熟悉 HTTP 通訊協定的人可能覺得此文字難以理解,但任何對該通訊協定的命令和語法有基本瞭解的人都能輕鬆讀懂。)
當使用者透過網站或 Web 應用程式提交敏感性資料時,這尤其是一個問題。敏感性資料可能是密碼、信用卡號,或在表單中輸入的任何其他資料。而且在 HTTP 中,所有這些資料都以純文字形式傳送,任何人都能讀取。(當使用者提交表單時,瀏覽器會將其轉換為 HTTP POST 請求,而不是 HTTP GET請求。)
來源伺服器到 HTTP 請求時,將傳送 HTTP 回應,其類似於:
HTTP/1.1 200 OK
Date: Wed, 30 Jan 2019 12:14:39 GMT
Server: Apache
Last-Modified: Mon, 28 Jan 2019 11:17:01 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain
Hello World!
如果網站使用 HTTP 而非 HTTPS,則監視工作階段的任何人都可以讀取所有請求和回應。本質上,惡意行為者只要讀取請求或回應中的文字,就能知道某人正在請求、傳送或接收的確切資訊。
HTTPS 中的 S 代表「安全」。HTTPS 使用 TLS(或 SSL)來加密 HTTP 請求和回應,因此在上述範例中,攻擊者看到的不是其文字,而是一堆看似隨機的字元。
攻擊者不會看到:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
而會看到類似如下內容:
t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==
TLS 使用一種稱為公開金鑰加密的技術:有兩個金鑰,即公開金鑰和私密金鑰,其中公開金鑰透過伺服器的 SSL 憑證與用戶端裝置分享。當用戶端開啟與伺服器的連線時,這兩個裝置使用公開金鑰和私密金鑰商定新的金鑰(稱為工作階段金鑰),以加密它們之間的後續通訊。
然後,所有 HTTP 請求和回應都使用這些工作階段金鑰進行加密),使任何截獲通訊的人都只能看到隨機字串,而不是純文字。
有關加密和金鑰運作方式的更多資訊,請參閱什麼是加密?
驗證是指核實一個人或一台電腦是否是聲稱的身分。HTTP 中沒有身分驗證,它基於信任原則。HTTP 的架構師不一定是做出了隱式信任所有 Web 伺服器的決定,只是在當時,他們有比安全更看重的內容。但在現代網際網路上,驗證是不可或缺的。
就像身分證件能確認一個人的身分一樣,私密金鑰可以確認伺服器的身分。當用戶端開啟與來源伺服器的連線通道時(例如,當使用者導覽到網站時),擁有與網站 SSL 憑證中公開金鑰匹配的私密金鑰可證明此伺服器確實是該網站的合法主機。這可以防止或幫助封鎖在沒有驗證時可能發生的多種攻擊,例如:
此外,SSL 憑證會由頒發該憑證的憑證授權單位進行數位簽署。這可以確認伺服器是其聲稱的身分。
Cloudflare 於 2014 年發佈了 Universal SSL,也是第一家免費提供 SSL 憑證的公司。任何註冊了 Cloudflare 服務的網站都可以一鍵啟用 HTTPS 並告別 HTTP。這使得 TLS 加密廣泛可用,進而保護整個網際網路上的使用者和使用者資料。
要深入瞭解 HTTP 與 HTTPS 的相關資訊,請參閱什麼是混合內容?