所有 SSL 文章 SSL 與憑證

什麼是雙向 TLS(mTLS)?用戶端證書認證

在普通 HTTPS 中,只有伺服器用證書證明身份。用戶端(瀏覽器)是匿名的——伺服器不知道是誰在連線。

**雙向 TLS(mTLS)**增加了第二步:用戶端也出示證書。雙方相互認證。伺服器根據受信任的 CA 驗證用戶端證書,用戶端驗證伺服器的——因此稱為”雙向”。

普通 TLS vs 雙向 TLS

普通 TLS雙向 TLS(mTLS)
伺服器證明身份✅ 證書 + CA 簽名✅ 相同
用戶端證明身份❌ 匿名✅ 用戶端證書
認證方式單向(僅伺服器)雙向(雙方)
使用場景公開網站內部 API、零信任
用戶端需要僅瀏覽器證書 + 私鑰
配置複雜度標準較高——需要管理用戶端證書

何時使用 mTLS

服務間通訊

微服務之間透過網路相互通訊。mTLS 確保只有授權的服務才能連線——不是任何知道 URL 的人。

Service A ←──mTLS──→ Service B
Both verify: "Are you who you claim to be?"

零信任架構

在零信任中,沒有網路連線是預設受信任的——即使在企業網路內部。mTLS 用基於身份的信任(證書)取代基於網路的信任(防火牆、VPN)。

API 安全

超越 API 金鑰保護敏感 API。被竊取的 API 金鑰任何人都能使用。用戶端證書繫結到特定私鑰——更難竊取和使用。

物聯網裝置認證

裝置在製造時預置用戶端證書連線到後端。伺服器知道它在與真實裝置通訊,而非偽造的。

mTLS 的工作原理

  1. 用戶端連線併發起 TLS 握手(與普通 TLS 相同)
  2. 伺服器傳送其證書 —— 用戶端驗證(與普通 TLS 相同)
  3. 伺服器請求用戶端證書 —— 傳送 CertificateRequest 訊息
  4. 用戶端傳送其證書 —— 伺服器根據受信任的 CA 驗證
  5. 雙方計算會話金鑰,加密通訊開始

步驟 3-4 使其成為”雙向”。

Nginx mTLS 配置

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

    # Server certificate (same as regular HTTPS)
    ssl_certificate     /etc/ssl/server-fullchain.pem;
    ssl_certificate_key /etc/ssl/server-privkey.pem;

    # Client certificate verification
    ssl_client_certificate /etc/ssl/client-ca.pem;  # CA that signed client certs
    ssl_verify_client on;                            # Require client cert

    # Optional: pass client cert info to your app
    proxy_set_header X-Client-DN $ssl_client_s_dn;
    proxy_set_header X-Client-Verify $ssl_client_verify;
}

mTLS vs 其他認證方式

方式安全級別複雜度最適合
API key低(可共享)公開 API、速率限制
OAuth/JWT面向使用者的 API
mTLS高(密碼學繫結)服務間通訊、零信任
mTLS + JWT最高傳輸層和應用層雙重認證

mTLS 與 GetHTTPS

GetHTTPS 簽發的是伺服器證書——你的 Web 伺服器用來證明身份的證書。這是所有 HTTPS 網站使用的標準 SSL 證書。

mTLS 的用戶端證書通常由私有 CA(你組織的內部 CA)簽發,而非像 Let’s Encrypt 這樣的公共 CA。Let’s Encrypt 不簽發用戶端證書——它們只為公共域名簽發伺服器證書。

常見問題

能用 Let’s Encrypt 做 mTLS 嗎?

伺服器證書:可以。用戶端證書:不行。用戶端證書需要由你控制的私有 CA 簽發——由你決定哪些用戶端被授權。opensslcfsslstep-ca 等工具可以充當你的私有 CA。

mTLS 和”用戶端證書認證”是同一個東西嗎?

是的。“雙向 TLS”、“mTLS”、“雙向 TLS”和”用戶端證書認證”都指同一個東西——雙方在 TLS 握手時都出示證書。

mTLS 能替代 API 金鑰嗎?

可以,但它們服務於不同目的。mTLS 證明的是傳輸層身份(哪個服務在連線)。API 金鑰/JWT 證明的是應用層身份(哪個使用者/許可權)。許多系統同時使用兩者以實現縱深防禦。

mTLS 常用在哪裡?

Kubernetes(使用 Istio/Linkerd 的服務網格)、Cloudflare Access、AWS API Gateway(雙向 TLS)、Google Cloud 的 BeyondCorp,以及大多數企業零信任實現。

相關文章

SSL 與憑證 2026-05-07
SSL/TLS 如何工作:TLS 握手詳解
TLS 握手的視覺化解析——瀏覽器和伺服器如何在毫秒內建立加密連線。涵蓋 TLS 1.2、TLS 1.3、會話恢復和前向保密。
SSL 與憑證 2026-05-08
公鑰密碼學:SSL 加密的實際工作原理
公鑰密碼學使用金鑰對——一個公鑰、一個私鑰——來保護 HTTPS 連線。瞭解非對稱加密、數字簽名和金鑰交換如何使 SSL/TLS 成為可能。
SSL 與憑證 2026-05-08
什麼是 SSL 證書?
SSL 證書是一個數字檔案,用於驗證網站身份並啟用加密 HTTPS 連線。瞭解證書包含什麼、如何工作、如何免費獲取,以及為什麼每個站點都需要。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證