TL;DR | 面試情境模擬 #
👴 面試官:HTTP 和 HTTPS 有什麼差別?
🧑💻 你:HTTP 是明文傳輸,任何人在路上都可以攔截並看到內容。HTTPS 在 HTTP 外層加了 TLS 加密通道,解決三件事:加密資料(中間人看不懂)、驗證身份(確認你連的是真的網站)、確保完整性(資料沒被竄改)。
比喻:明信片 vs 密封信封 #
- HTTP:像寄明信片,郵差、鄰居、任何人都能直接讀到內容。
- HTTPS:像密封信封,外面還貼了官方驗證印章。只有收件人才能打開,而且你知道這封信確實是寄件人本人寄的。
核心差異 #
| 特性 | HTTP | HTTPS |
|---|---|---|
| 加密 | 無(明文) | TLS 加密 |
| 身份驗證 | 無 | 有(SSL 憑證) |
| 資料完整性 | 無保障 | MAC 驗證 |
| 預設 Port | 80 | 443 |
| 速度 | 稍快 | 多一次 TLS handshake(現代差距極小) |
TLS Handshake 流程 #
HTTPS 建立連線前,會先完成 TLS 握手:
Client Server
| |
|--- 1. ClientHello(支援的加密演算法)-->|
| |
|<-- 2. ServerHello + 憑證 -----------|
| |
|--- 3. 驗證憑證,產生 Pre-Master Key -->|
| |
|<-- 4. 雙方各自產生 Session Key -------|
| |
| (之後用 Session Key 對稱加密) |
憑證做了什麼? #
憑證由 CA(憑證授權機構,例如 Let’s Encrypt、Digicert)簽發,瀏覽器內建信任的 CA 清單。當你連上 https://example.com,瀏覽器會驗證:
- 憑證是否由信任的 CA 簽發
- 憑證上的域名是否符合你連的網址
- 憑證是否過期
三個都過,才顯示鎖頭圖示。
💡 面試官可能會追問 #
Q1:HTTPS 一定安全嗎? #
不一定。HTTPS 只保證「傳輸過程加密」,不保證:
- 網站本身沒有漏洞(XSS、SQL injection 還是可以發生)
- 你連的網站是好的(釣魚網站也可以申請 HTTPS 憑證)
Q2:HTTP/2 和 HTTPS 是同一件事嗎? #
不是。HTTP/2 是 HTTP 協定的升級版(效能優化),HTTPS 是 HTTP + TLS 加密。實務上兩者通常一起用,但概念上是獨立的。
Q3:為什麼現在 HTTP 網站瀏覽器會標「不安全」? #
2018 年 Chrome 68 起,所有非 HTTPS 網站都顯示「不安全」警告。Let’s Encrypt 讓 HTTPS 憑證可以免費申請,所以現代網站幾乎沒有理由不上 HTTPS。