基本概念

CA(如 Let's Encrypt)
  ↓ 用 ACME 協定申請
證書(身分證)
  ↓ 放在 Server 上
TLS(用證書做握手 + 加密)
  ↓
瀏覽器看到 🔒 鎖頭
  • 證書 = 證明「我是這個網站」的身分證
  • TLS = 驗證身分 + 加密通訊的協定
  • CA = 簽發身分證的機構
  • ACME = 向 CA 申請身分證的流程
  • OpenSSL = 產生金鑰和證書的工具

名詞解釋

名詞是什麼層級背書嗎
CA(Certificate Authority)簽發證書的機構簽發者✅ 背書
Let's Encrypt一家特定的 CA(免費)簽發者✅ 背書
DigiCert / GlobalSign / Sectigo其他付費 CA簽發者✅ 背書
ACME自動申請/續簽證書的協定(RFC 8555)協定❌ 不背書
TLS(Transport Layer Security)用證書加密傳輸的協定協定❌ 不背書
OpenSSL產生金鑰、CSR、證書的工具工具❌ 不背書
CSR(Certificate Signing Request)向 CA 申請證書的請求檔請求檔❌ 不背書
Origin CACloudflare 專屬的 CA(只被 Cloudflare 信任)簽發者⚠️ 只被 Cloudflare 信任
自簽證書(Self-signed)自己簽自己的證書證書❌ 無 CA 背書

關係圖

CA(如 Let's Encrypt)
  ↕ 透過 ACME 協定溝通
ACME 客戶端(如 certbot / acme.sh)
  ← 需要 OpenSSL 產生金鑰和 CSR

最終產物:TLS 證書
  → 放在 Server 上
  → 用於 TLS 握手
  → 瀏覽器驗證

角色關係

┌─────────────┐
│  使用者瀏覽器  │  內建信任 CA 清單
└──────┬──────┘
       │ TLS 連線
       ↓
┌─────────────┐
│  網站伺服器   │  放著 CA 簽發的證書
└─────────────┘
       ↑
       │ 用 ACME 協定申請
       │
┌─────────────┐
│  CA(如      │  簽發證書
│  Let's Encrypt)│
└─────────────┘

誰做什麼

角色做什麼需要準備證書嗎
CA簽發證書、背書自己就是 CA
ACME 客戶端跑 ACME 協定向 CA 申請不需要
OpenSSL產生金鑰和 CSR不需要
Server放證書、提供 TLS 服務✅ 需要
User / Client連線、驗證證書❌ 不需要

TLS 握手流程

1. Client → Server:ClientHello(我要連線,支援這些加密算法,並附上一把臨時公鑰)
2. Server → Client:ServerHello + 證書(裡面有公鑰)+ 自己的臨時公鑰
3. Client 檢查證書:
   - 誰簽的? → CA(如 Let's Encrypt)→ 信任清單有 → ✅
   - 域名對嗎? → myblog.com = myblog.com → ✅
   - 過期了嗎? → 還沒 → ✅
4. Client 用證書裡的公鑰,驗證 Server 對這次交握的簽章確實是該私鑰簽的(證明身分)
5. 雙方各自用自己的臨時私鑰 + 對方的臨時公鑰,各自算出同一把共同金鑰((EC)DHE 金鑰交換)
6. 雙方用這把共同金鑰加密所有後續通訊

證書在 TLS 裡的角色

步驟證書的作用
步驟 2Server 把證書傳給 Client
步驟 3Client 驗證證書(CA 簽的?域名對?沒過期?)
步驟 4用證書裡的公鑰驗證身分簽章,不是拿來加密金鑰本身
步驟 5-6對稱金鑰是雙方用臨時金鑰各自算出來的,之後加密跟證書無關
⚠️ 沒有身分驗證:沒有證書,TLS 無法驗證對方身分,只能加密但不能確認連的是真的網站。
🔑 現代 TLS 用的是 (EC)DHE,不是舊式 RSA 金鑰交換: 早期 TLS(1.2 及以前)有一種做法是 Client 直接用證書公鑰加密對稱金鑰傳給 Server(RSA 金鑰交換)——這種做法的問題是,一旦 Server 私鑰未來洩漏,過去側錄下來的封包全部可以回頭解密。 現在主流(尤其 TLS 1.3 已完全移除 RSA 金鑰交換)改用 (EC)DHE(橢圓曲線迪菲赫爾曼):雙方各自產生臨時金鑰對,交換公鑰後各自算出同一把共同密鑰,證書公鑰只用來驗證簽章、確認身分,不參與金鑰本身的加密。好處是具備「前向保密」(Forward Secrecy):就算伺服器私鑰之後洩漏,也無法回溯解密過去錄下的流量。

證書種類

種類誰簽發瀏覽器信任費用佔比
CA 簽發(如 Let's Encrypt)公開 CA✅ 信任免費~付費絕大多數
Cloudflare Origin CACloudflare❌ 瀏覽器看不到免費只在 CF↔Origin 之間
自簽證書自己❌ 不信任免費極少(公開 WWW)

瀏覽器行為

證書來源瀏覽器警告原因
Let's Encrypt(透過 ACME 申請)✅ 不警告公開 CA,瀏覽器信任
Cloudflare 公開 CA(Universal SSL)✅ 不警告公開 CA,瀏覽器信任
Cloudflare Origin CA瀏覽器看不到只在 Cloudflare ↔ Origin 之間用
OpenSSL 自簽❌ 警告沒有 CA 背書,瀏覽器不信任
🔒 關鍵:證書只證明「連線是加密的」,不證明「網站內容是安全的」。詐騙網站也能有鎖頭。

常見 CA 一覽

Let's Encrypt 只是眾多被瀏覽器信任的 CA 之一。Chrome、Firefox、Edge、Safari 各自維護自己的信任清單,實際收錄的根憑證數量約在 100~200 顆左右,對應的憑證機構則約數十家;確切數字會隨瀏覽器版本、憑證下架/新增而變動,沒有一個固定不變的數字。只要簽發者在瀏覽器的信任清單裡,簽出來的證書瀏覽器就會信任。

常見的 CA

CA類型費用
Let's Encrypt免費免費,90 天,需自動續簽
ZeroSSL免費免費,支援 ACME(需 EAB)
Google Trust ServicesGoogle 的 CA每月前 100 張免費(透過 ACME,需 EAB),超過後收費
DigiCert付費企業級,價格較高
GlobalSign付費企業級
Sectigo(原 Comodo)付費常見商業 CA
Entrust付費企業級
Certum付費波蘭 CA
Microsoft RSA TLS CAMicrosoft 的 CA內部使用
Apple Root CAApple 的 CA內部使用

免費 CA 比較

CA免費支援 ACME效期現況/限制
Let's Encrypt90 天(未來會縮短,見 Cloudflare 章節)免帳號綁定,最主流的免費 CA
ZeroSSL90 天需先到官網申請 EAB 金鑰才能用 ACME
Google Trust Services✅(每月前 100 張)✅(需 EAB)90 天需要 Google Cloud 帳號並取得 EAB 金鑰,設定比 Let's Encrypt 麻煩一些
Buypass Go SSL❌ 已停止服務(原本 180 天)2025-10-16 起停止受理新申請、續簽與換發
Cloudflare Origin CA最長 15 年只被 Cloudflare 信任,瀏覽器不信任
⚠️ 修正:Buypass Go SSL 已停止服務。Buypass 已於 2025 年 10 月 16 日起終止 Go SSL 免費憑證服務,不再受理新申請或續簽,既有憑證只能等到期後改用其他 CA。目前可用的免費 ACME CA 實務上剩下 Let's Encrypt、ZeroSSL、Google Trust Services 三家。

你能從其他 CA 申請嗎

能。只要該 CA 在瀏覽器信任清單裡,簽發的證書瀏覽器都信任。用 ACME 申請其他免費 CA:

# === ZeroSSL(需先在 zerossl.com 取得 EAB 金鑰)===
certbot certonly --server https://acme.zerossl.com/v2/DV90 \
  --eab-kid <你的ID> --eab-hmac-key <你的金鑰> \
  -d myblog.com

# === Google Trust Services(需先在 Google Cloud 建立 EAB 金鑰)===
certbot certonly --server https://dv.acme-v02.api.pki.goog/directory \
  --eab-kid <你的ID> --eab-hmac-key <你的金鑰> \
  -d myblog.com

付費 CA 則是直接向 CA 購買,或透過代理商(如 SSLs.com、GoDaddy)購買;買完後一樣用 OpenSSL 產生 CSR 提交給 CA,CA 簽發後下載證書安裝。

💡 Let's Encrypt 會不會倒?Let's Encrypt 由非營利組織 ISRG 運營,由 Mozilla、Cisco、Google、Meta 等贊助,是目前最穩定的免費 CA。如果真的倒了,可以改用 ZeroSSL 或 Google Trust Services,用 ACME 重新申請即可,流程大同小異(Buypass 已於 2025 年停止服務,不再是可行的替代選項)。

ACME 協定

ACME(Automatic Certificate Management Environment)是基於 HTTPS 的 JSON API(RFC 8555)。

流程

1. 建立帳號
   POST /acme/new-account
   → Let's Encrypt 回傳帳號 URL

2. 申請證書
   POST /acme/new-order
   → Let's Encrypt 回傳挑戰(challenge)

3. 完成挑戰(證明你擁有該域名)
   - HTTP-01:在網站放一個特定檔案
   - DNS-01:在 DNS 加一條 TXT 記錄
   - TLS-ALPN-01:在伺服器 TLS 回應特定內容

4. 驗證通過,提交 CSR
   POST /acme/finalize
   → Let's Encrypt 簽發證書

5. 下載證書
   POST /acme/cert/...
   → 拿到簽好的證書

所有請求都用 JSON 格式,透過 HTTPS 傳輸,每個請求都用你的帳號私鑰簽名。

你通常不會自己寫 ACME 協定,而是用 ACME 客戶端工具幫你自動完成:

ACME 客戶端說明
certbot最常用,Python 寫的
acme.sh輕量,Shell 腳本
legoGo 寫的
Caddy內建 ACME 自動申請

OpenSSL 的角色

OpenSSL 是工具,不是 CA,不會自己跑 ACME 協定。

OpenSSL 可以做兩件事

用途說明瀏覽器信任嗎
產生自簽證書自己簽自己❌ 不信任
產生 CSR 向 CA 申請拿 CA 簽發的證書✅ 信任

指令範例

# === 自簽(瀏覽器不信任)===
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes

# === 向 CA 申請(瀏覽器信任)===

# 1. 產生私鑰
openssl genrsa -out key.pem 2048

# 2. 產生 CSR(Certificate Signing Request)
openssl req -new -key key.pem -out csr.pem

# 3. 用 ACME 客戶端拿 CSR 向 Let's Encrypt 申請
certbot certonly --csr csr.pem

# 4. Let's Encrypt 簽發證書
# → 拿到簽好的證書

同樣是 OpenSSL 產生的證書

自己簽 → 沒人背書 → ❌ 瀏覽器警告
拿去給 CA 簽 → CA 背書 → ✅ 瀏覽器信任

OpenSSL 是產生證書的工具,不是背書的機構。

Server 端場景

場景 1 — 你架了一個網站 myblog.com

你需要一張證書讓瀏覽器信任。

1. 用 OpenSSL 產生私鑰和 CSR
2. ACME 客戶端(certbot)用 ACME 協定向 Let's Encrypt 申請
3. Let's Encrypt 驗證你真的擁有 myblog.com
4. Let's Encrypt(CA)簽發一張證書給你
5. 你把證書裝在伺服器上
6. 瀏覽器連過來 → 看到證書 → 查到 Let's Encrypt 在信任清單 → ✅

場景 2 — 你的網站掛在 Cloudflare 後面

瀏覽器 → Cloudflare Edge → 你的伺服器 (Origin)
         ↑                    ↑
    Cloudflare 公開 CA       你用 Origin CA 證書
    (Universal SSL)         (Dashboard 點幾下產生)
    (瀏覽器信任)            (只有 Cloudflare 信任)
  • 前段(瀏覽器 ↔ Cloudflare Edge):Cloudflare 自動處理,你不用管
  • 後段(Cloudflare Edge ↔ 你的伺服器):你用 Origin CA 證書

場景 3 — 你架了內部服務,不對外公開

自己用 OpenSSL 產一張自簽證書就好,反正只有你自己用。

場景 4 — Cloudflare Pages

瀏覽器 → Cloudflare Edge → Cloudflare Pages
  ↑                         ↑
  Cloudflare 公開 CA 證書    Pages 內部(你不用管)
  (瀏覽器信任)

瀏覽器看到的是 Cloudflare 的公開 CA 證書(Universal SSL),不是 Origin CA。你完全不用管證書。

Server 端證書選擇整理

場景準備什麼證書類型
一般網站向 CA 申請公開 CA 證書(如 Let's Encrypt)
掛在 Cloudflare 後面Dashboard 產生Origin CA 證書
內部服務自己產生自簽證書
Cloudflare Pages不用管Cloudflare 自動處理

User / Client 端場景

User 什麼時候會碰到 ACME / Let's Encrypt / CA?

幾乎不會。這些都是 Server 端的事。

名詞User 會碰到嗎說明
CA不會主動碰到瀏覽器內建信任清單,自動檢查
Let's Encrypt不會碰到Server 端申請的
ACME不會碰到Server 端自動續簽用的
TLS不會主動碰到瀏覽器自動處理加密
OpenSSL不會碰到Server 端產生證書用的
CSR不會碰到Server 端申請證書用的

User 唯一會碰到的情況

看到「不安全」警告的時候。

你連到一個網站
  → 瀏覽器顯示「不安全」
  → 代表對方用自簽證書,或證書過期
  → 你決定要不要繼續(通常不建議)

User 端要做的事

角色要做的事
Server申請證書(用 ACME 向 Let's Encrypt 等 CA 申請),裝在伺服器上
User什麼都不用做,瀏覽器自動檢查證書

Cloudflare 相關

Cloudflare 的證書架構

使用者瀏覽器  ←→  Cloudflare Edge(全球節點)  ←→  Origin(你的伺服器)
   ↑                    ↑                              ↑
 看到的證書           證書在這終止                    你的實際機器
 (公開 CA)          (Cloudflare 處理)            (放證書的地方)

兩段加密

位置證書誰處理
前段瀏覽器 ↔ Cloudflare Edge公開 CA(Universal SSL)Cloudflare 自動處理
後段Cloudflare Edge ↔ Origin你決定用什麼你自己處理

Cloudflare SSL/TLS 模式

模式Origin 可以用自簽嗎Cloudflare 會驗證嗎
Flexible不需要證書不驗證(HTTP 連 origin)
Full可以不驗證(接受自簽、過期、CN 不符)
Full (strict)不行會驗證(必須是公開 CA 或 Origin CA 簽發)

Origin CA vs 公開 CA

公開 CA(如 Let's Encrypt)Cloudflare Origin CA
誰簽發公開憑證機構Cloudflare 自己
瀏覽器信任✅ 信任❌ 不信任
用途瀏覽器 ↔ 網站只在 Cloudflare ↔ Origin 之間
有效期90 天(Let's Encrypt,2026 起逐步縮短,見下方)最長 15 年
費用免費免費
需要 ACME是(自動續簽)不用(Dashboard 產生)

Let's Encrypt 效期正在縮短(2026-2028 時程)

CA/Browser Forum 已通過縮短憑證效期的提案,Let's Encrypt 依此排定時程:

時間點變化
2026 年 1 月已上線 160 小時(約 6 天)超短效期選項;IP 位址憑證目前只能申請這種短效期(不能簽 90 天)
2026 年 5 月 13 日可選用 ACME 的 TLS 伺服器專用設定檔,新憑證改為 45 天(早期試用,非強制)
2027 年 2 月 10 日預設(Classic)設定檔新簽發憑證效期降為 64 天,並有 10 天授權重用期
2028 年 2 月 16 日預設設定檔效期全面降為 45 天,授權重用期縮到 7 小時
📌 只影響新簽發憑證:這些時程只影響「新簽發」的憑證,既有憑證通常等下次續期才會感受到變化。另外 Let's Encrypt 已於 2025 年停發到期提醒信,未來完全依賴伺服器端自動續約,不能再靠收信提醒——自動化續約機制要顧好。付費憑證也有類似趨勢,目前最長 398 天,預計 2026 年底前縮到 200 天,2027-2028 年間全面降到 90 天內。

Cloudflare Tunnel 的證書

Quick Tunnel(臨時)Named Tunnel(正式)
網址隨機 *.trycloudflare.com你的子域名.你的域名
證書Cloudflare 萬用字元憑證Universal SSL(你的域名)
需要設定嗎不用,自動有不用,自動有
瀏覽器信任✅ 信任✅ 信任
需要 ACME不用不用

不管用哪種 Tunnel,瀏覽器 ↔ Cloudflare Edge 這段的證書都是 Cloudflare 自動處理的,你完全不用自己申請或設定。

Cloudflare Edge vs Windows Edge

完全不同的東西,只是名字一樣:

Cloudflare EdgeWindows Edge
是什麼Cloudflare 全球網路的邊緣節點(伺服器)微軟的瀏覽器
屬於CloudflareMicrosoft
在哪全球 300+ 城市的資料中心你的電腦/手機上

自簽證書問題(翻牆場景)

自簽證書在公開 WWW 上的流量

非常少,幾乎可以忽略。

場景公開 WWW?流量佔比
內部企業服務
伺服器回源(Origin ↔ CDN)
開發/測試環境
IoT 設備管理介面
Cloudflare WARP / 零信任服務半公開
一般公開網站極少

自簽證書在翻牆中的問題

問題說明
會被主動探測GFW 主動連你的 IP,看到證書無效,就知道不是正常網站
信譽過低正常公開網站不會用自簽證書,用自簽 = 暴露自己
誤殺附帶傷害低封掉自簽證書的 IP 不會影響正常網站,GFW 封起來沒顧忌
機器學習識別(推測,未證實)理論上 GFW 可用 Embedding + K-Means 等聚類方法將自簽證書流量歸為單獨一類,但目前沒有公開技術文件證實 GFW 實際採用此機制,屬合理推測而非既定事實

例外:Cloudflare WARP

Cloudflare WARP(162.159.197.2 等)用自簽證書,但跟企業用戶共用入口,封了會有附帶傷害。不過一般人自簽證書沒有這種保護。

常見組合整理

OpenSSL + Let's Encrypt

OpenSSL(產生金鑰 + CSR)
  → ACME 客戶端(certbot / acme.sh)
    → Let's Encrypt(CA 簽發)
      → 拿到證書 → 瀏覽器信任 ✅

OpenSSL 自簽

OpenSSL(產生金鑰 + 自己簽)
  → 沒有 CA 背書
    → 瀏覽器警告 ❌

OpenSSL CSR + CA + Let's Encrypt

# 1. OpenSSL 產生私鑰
openssl genrsa -out key.pem 2048

# 2. OpenSSL 產生 CSR
openssl req -new -key key.pem -out csr.pem

# 3. ACME 客戶端拿 CSR 向 Let's Encrypt 申請
certbot certonly --csr csr.pem

# 4. Let's Encrypt(CA)簽發證書
# → 拿到簽好的證書 → 瀏覽器信任 ✅

Cloudflare Origin CA

1. 在 Cloudflare Dashboard 產生 Origin CA 證書
2. 放在你的伺服器上
3. 設定 SSL/TLS 模式為 Full (strict)
4. Cloudflare Edge 信任你的伺服器
5. 瀏覽器看到的是 Cloudflare 的公開 CA 證書 → 信任 ✅

Cloudflare Tunnel

1. cloudflared 連到 Cloudflare Edge
2. 瀏覽器 ↔ Cloudflare Edge 的證書由 Cloudflare 自動處理
3. 你不用管任何證書
4. 瀏覽器信任 ✅

常見 Q&A

Q:CA 背書的是 ACME 還是 Let's Encrypt?

是 Let's Encrypt(CA)背書。ACME 只是申請的協定/流程,不背書。

Q:OpenSSL 很多人用,為什麼瀏覽器不信任?

OpenSSL 是工具,不是 CA。同樣是 OpenSSL 產生的證書:自己簽 → 沒人背書 → ❌ 警告;拿去給 CA 簽 → CA 背書 → ✅ 不警告。

Q:掛在 Cloudflare 後面的危險網站,瀏覽器會警告嗎?

不會。瀏覽器看到的是 Cloudflare 的公開 CA 證書,不是 Origin CA。證書只證明連線加密,不證明內容安全。

Q:User 端需要準備證書嗎?

不需要。證書是 Server 端準備的。User 端的瀏覽器內建信任 CA 清單,自動驗證。

Q:ACME 是什麼?

自動申請/續簽證書的協定(RFC 8555)。基於 HTTPS 的 JSON API。你通常用 ACME 客戶端(如 certbot)自動完成,不會自己寫協定。

Q:TLS 跟證書有什麼關係?

TLS 是使用證書的協定。證書是「身分證」,TLS 是「檢查身分證 + 加密通訊」的流程。沒有證書,TLS 無法驗證對方身分。

Q:Origin CA 跟公開 CA 一樣嗎?

不一樣。Origin CA 只被 Cloudflare 信任,瀏覽器不信任。公開 CA(如 Let's Encrypt)被所有瀏覽器信任。Origin CA 只在 Cloudflare Edge ↔ 你的伺服器之間使用。

Q:Cloudflare Tunnel 需要設定證書嗎?

不用。不管 Quick Tunnel 還是 Named Tunnel,瀏覽器 ↔ Cloudflare Edge 的證書都是 Cloudflare 自動處理的。