萬用字元 SSL 證書用一張證書保護一個域名及其所有子域名。無需為 www.example.com、blog.example.com 和 api.example.com 分別獲取證書,一張 *.example.com 萬用字元即可全部覆蓋。
萬用字元如何工作
萬用字元字元 * 匹配任何單級子域名:
| 證書 | 覆蓋 | 不覆蓋 |
|---|---|---|
*.example.com | www.example.com、blog.example.com、api.example.com、anything.example.com | example.com(裸域名)、sub.blog.example.com(巢狀) |
*.example.com + example.com | 所有子域名 + 裸域名 | 巢狀子域名 |
*.sub.example.com | a.sub.example.com、b.sub.example.com | sub.example.com、example.com |
關鍵限制: 萬用字元只匹配一級。*.example.com 不覆蓋 a.b.example.com。
萬用字元 vs 多域名(SAN)
| 萬用字元 | 多域名(SAN) | |
|---|---|---|
| 覆蓋 | 一級的所有子域名 | 特定列出的域名 |
| 靈活性 | 任何子域名自動生效 | 必須明確列出每個域名 |
| 新子域名 | 即時覆蓋 | 需要新證書 |
| 跨域 | 否(一個基礎域名) | 是(example.com + other.com) |
| 需要 DNS-01 | ✅ 是 | 否(HTTP-01 或 DNS-01) |
使用萬用字元當: 你有多個子域名或經常新增新的。 使用 SAN 當: 你有少量固定的特定域名/子域名。
何時使用萬用字元證書
適合的場景:
- 你有多個子域名(
app.、api.、docs.、blog.、staging.等)且不想為每個管理單獨的證書 - 你經常新增新子域名——它們無需重新簽發即可自動覆蓋
- 開發/測試環境中子域名名稱經常變化
萬用字元不適合的場景:
- 你需要覆蓋不同的基礎域名(
example.com+example.org)—— 使用 SAN 證書 - 你需要子域名級別的隔離——如果一個子域名的金鑰洩露,萬用字元證書覆蓋所有子域名
- 你不能修改 DNS 記錄——萬用字元簽發需要 DNS-01,這需要 DNS 訪問許可權
安全考慮
萬用字元證書意味著一個私鑰保護所有子域名。如果金鑰洩露,攻擊者可以冒充任何子域名——不僅僅是一個。
緩解措施:
- 限制私鑰訪問 —— 只有需要它的伺服器應該有金鑰檔案
- 使用短期證書 —— Let’s Encrypt 90 天有效期限制暴露視窗
- 考慮為高安全子域名使用獨立證書(如
admin.example.com可能需要自己的證書)
獲取免費萬用字元證書
Let’s Encrypt 透過 DNS-01 驗證免費支援萬用字元證書。大多數競爭對手(ZeroSSL、SSL For Free)將萬用字元限制為付費套餐。
使用 GetHTTPS:
- 輸入
*.example.com(如果要裸域名則加上example.com) - 新增 GetHTTPS 提供的 DNS TXT 記錄
- 等待 DNS 傳播(GetHTTPS 會為你預檢)
- 驗證並下載證書檔案
安裝萬用字元證書
與任何證書相同——伺服器不知道這是萬用字元:
Nginx:
server {
listen 443 ssl http2;
server_name *.example.com example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
}
Apache:
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem
SSLCertificateKeyFile /etc/ssl/privkey.pem
SSLCertificateChainFile /etc/ssl/chain.pem
</VirtualHost>
常見問題
為什麼萬用字元不能用 HTTP-01?
HTTP-01 透過在 http://hostname/.well-known/acme-challenge/... 放置檔案來驗證特定主機名。萬用字元覆蓋無限子域名——沒有單一伺服器來放置檔案。DNS-01 透過區域級別的 TXT 記錄證明對整個域名的控制。
*.example.com 覆蓋 example.com 嗎?
不覆蓋。裸域名是獨立的。在證書請求中同時新增 *.example.com 和 example.com。GetHTTPS 和 Certbot 都支援在一張證書中包含兩者。
能從 ZeroSSL 獲取免費萬用字元嗎?
不能。ZeroSSL 將萬用字元證書限制為付費套餐($10/月+)。Let’s Encrypt 免費提供萬用字元。
同一域名能有多張萬用字元證書嗎?
可以。沒有技術限制。你可以有 *.example.com 和 *.staging.example.com 作為獨立證書。Let’s Encrypt 的速率限制是每註冊域名每週 50 張證書。
萬用字元證書覆蓋巢狀子域名嗎?
不覆蓋。*.example.com 覆蓋 www.example.com 和 api.example.com,但不覆蓋 dev.api.example.com。對於巢狀子域名,你需要單獨的萬用字元如 *.api.example.com。
如何測試萬用字元證書對特定子域名是否有效?
將子域名的 DNS 指向你的伺服器,然後測試:
echo | openssl s_client -connect subdomain.example.com:443 -servername subdomain.example.com 2>/dev/null | openssl x509 -noout -subject -dates
證書應顯示 CN=*.example.com 或 SAN 欄位中有 *.example.com。如果得到連線錯誤,說明子域名的 DNS 沒有指向託管萬用字元證書的伺服器。
能在多臺伺服器上使用萬用字元證書嗎?
可以。在處理子域名的每臺伺服器上安裝相同的 fullchain.pem 和 privkey.pem。證書不知道自己在哪臺伺服器上——它只驗證主機名。