HTTPS 與 TLS 的真正運作原理:深入解析

Security2026-11-08TryQuickToolBox

你輸入一個網址,按下 Enter,然後看到鎖頭圖示。但你的瀏覽器和伺服器之間究竟發生了什麼,讓這個連線變得安全?許多開發者把 HTTPS 當成黑盒子——直到出了問題,比如憑證錯誤或效能問題。本文將揭開 HTTPS 和 TLS 的神祕面紗,用實用的方式解釋手握手續、加密和憑證驗證。

HTTPS 到底是什麼

HTTPS 簡單來說就是將 HTTP 置於 TLS(Transport Layer Security,傳輸層安全性)之上。TLS 提供三項保證:

TLS 是從 SSL(Secure Sockets Layer,安全通訊端層)演進而來。你應該使用現代版本(TLS 1.2 和 1.3);SSL 已被棄用。

TLS 手握手續:逐步解析

在任何 HTTP 資料流動之前,用戶端和伺服器會執行手握手續,以協商加密金鑰。以下是典型的 TLS 1.3 手握手續(簡化版)中發生的事:

  1. Client Hello: 瀏覽器發送支援的加密套件清單、一個隨機值,以及用於金鑰交換的金鑰共享。
  2. Server Hello: 伺服器選擇一個加密套件,發送自己的隨機值和金鑰共享,並出示其憑證。
  3. 金鑰衍生: 雙方使用 Diffie-Hellman 金鑰交換計算出相同的共享密鑰。由此,他們衍生出用於對稱加密的會話金鑰。
  4. Finished: 雙方發送 MAC(訊息驗證碼)以驗證手握手續的完整性。加密的應用程式資料現在可以流動了。

TLS 1.3 將手握手續減少到一個往返(1-RTT),甚至支援會話恢復的 0-RTT,從而改善延遲。

金鑰交換:Diffie-Hellman

現代 TLS 的魔力在於,用戶端和伺服器可以在從未傳輸共享密鑰的情況下就共享密鑰達成一致。Diffie-Hellman(具體來說是橢圓曲線的 ECDHE)允許這樣做。即使攻擊者記錄了整個手握手續,他們也無法衍生出會話金鑰——這種特性稱為前向保密。

對稱加密:AES 或 ChaCha20

一旦建立了共享密鑰,TLS 就會切換到對稱加密(如 AES-GCM 或 ChaCha20-Poly1305),因為它比非對稱加密快得多。會話金鑰用於加密所有應用程式資料。

憑證驗證:信任但驗證

伺服器的憑證是認證的核心。它包含伺服器的公開金鑰,並由憑證授權單位(CA)簽署。以下是瀏覽器驗證它的方式:

如果任何檢查失敗,你會收到警告——例如「你的連線不是私人連線」。

常見的 TLS 錯誤配置

即使啟用了 HTTPS,錯誤也可能削弱安全性:

使用 SSL Labs 的 SSL Test 等工具來檢查你的配置。

實用範例:使用 Nginx 啟用 HTTPS

以下是一個安全的 HTTPS 伺服器的最小 Nginx 配置:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;

    location / {
        root /var/www/html;
        index index.html;
    }
}

此配置使用 Let's Encrypt 憑證,僅啟用 TLS 1.2 和 1.3,並設定 HSTS。

常見問題

TLS 和 SSL 有什麼區別?

TLS 是 SSL 的後繼者。SSL 版本(2.0、3.0)因安全漏洞而被棄用。當人們說「SSL 憑證」時,通常指的是 TLS 憑證。

HTTPS 會讓我的網站變慢嗎?

現代 TLS(1.3)增加的延遲極小——通常只有幾毫秒。透過會話恢復和 HTTP/2,HTTPS 可以與 HTTP 一樣快,甚至更快。

如何取得免費的 TLS 憑證?

Let's Encrypt 提供免費、自動化的憑證。像 Certbot 這樣的工具可以為你取得並續訂它們。

結論

HTTPS 和 TLS 並非魔法——它們是設計良好的協定,結合了用於認證的公開金鑰密碼學和用於速度的對稱加密。了解手握手續和憑證驗證有助於你除錯問題並安全地配置伺服器。始終使用 TLS 1.2 或 1.3,保持憑證更新,並啟用 HSTS。

若要分析伺服器日誌以找出 TLS 錯誤或效能問題,試試我們的 Nginx 日誌分析器。