萬用字元 SSL 證書可以用一張證書保護一個域名及其所有子域名。例如,*.example.com 涵蓋 www.example.com、blog.example.com、api.example.com 以及任何其他子域名,無需逐一列出。
透過 GetHTTPS,你可以從 Let’s Encrypt 免費獲取萬用字元證書。大多數競品(ZeroSSL、SSL For Free)的萬用字元證書都是收費的。
前提條件
- 一個域名 — 你想用萬用字元保護的域名(如
example.com) - 能夠管理域名的 DNS 設定 — 萬用字元證書必須透過 DNS-01 驗證(HTTP-01 不支援萬用字元)
- 一個現代瀏覽器
為什麼只能用 DNS-01? HTTP-01 驗證透過在
http://hostname/.well-known/acme-challenge/...放置檔案來驗證單個主機名。萬用字元涵蓋無限個子域名,不存在一臺伺服器能放置所有檔案。DNS-01 透過 DNS TXT 記錄證明你對整個域名的控制權。
第一步:開啟 GetHTTPS
訪問 gethttps.com/app/setup。賬戶金鑰和證書金鑰將在瀏覽器中自動生成。
第二步:輸入萬用字元域名
輸入 *.example.com(將 example.com 替換為你的域名)。
常見配置:
| 輸入內容 | 覆蓋範圍 |
|---|---|
*.example.com | 所有子域名(www、blog、api 等) |
*.example.com + example.com | 所有子域名 + 裸域名 |
*.sub.example.com | sub.example.com 的所有子子域名 |
重要提示: *.example.com 的萬用字元證書不覆蓋 example.com 本身(裸域名)。如果兩者都需要,請將 example.com 作為單獨的名稱新增 — GetHTTPS 會在一張證書中同時處理。
第三步:新增 DNS TXT 記錄
GetHTTPS 會顯示一條需要建立的 DNS TXT 記錄:
- 記錄名稱:
_acme-challenge.example.com - 記錄值: 一串隨機字串(每次不同)
- 記錄型別: TXT
在你的 DNS 服務商處新增此記錄:
Cloudflare
- 進入 DNS → Records → Add record
- Type: TXT
- Name:
_acme-challenge(Cloudflare 會自動追加你的域名) - Content: 貼上 GetHTTPS 中顯示的值
- TTL: Auto
- 點選 Save
AWS Route 53
- 進入 Hosted zones → 選擇你的域名
- 點選 Create record
- Record name:
_acme-challenge - Record type: TXT
- Value:
"paste-value-here"(注意包含引號) - 點選 Create records
GoDaddy
- 進入 DNS Management
- 在 Records 下點選 Add
- Type: TXT
- Name:
_acme-challenge - Value: 貼上 GetHTTPS 中顯示的值
- TTL: 1 Hour
- 點選 Save
Namecheap
- 進入 Domain List → Manage → Advanced DNS
- 點選 Add new record
- Type: TXT
- Host:
_acme-challenge - Value: 貼上 GetHTTPS 中顯示的值
- TTL: Automatic
- 點選 Save all changes
第四步:等待 DNS 傳播
DNS 變更通常需要 1-5 分鐘在全球傳播,具體時間取決於你的服務商和 TTL 設定。
GetHTTPS 的預檢功能會透過公共 DNS(Google 的 DNS-over-HTTPS)查詢你的 TXT 記錄是否可見,然後再提交給 Let’s Encrypt。請等到預檢透過後再點選驗證。
第五步:驗證並下載
預檢確認 DNS 記錄就緒後,點選 Verify。Let’s Encrypt 將驗證並簽發你的萬用字元證書。
下載全部四個檔案:
privkey.pem— 你的私鑰(請妥善保管)cert.pem— 你的萬用字元證書chain.pem— 中間證書fullchain.pem— 證書 + 證書鏈(大多數伺服器需要此檔案)
第六步:安裝萬用字元證書
安裝方式與普通 SSL 證書相同。使用 fullchain.pem 和 privkey.pem:
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;
ssl_protocols TLSv1.2 TLSv1.3;
}
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>
清理
證書籤發後,你可以刪除 DNS 中的 _acme-challenge TXT 記錄。該記錄僅在驗證時需要,續簽時會建立新的記錄。
為什麼選擇 GetHTTPS 獲取萬用字元證書?
大多數基於瀏覽器的 SSL 工具對萬用字元證書收費:
| 工具 | 免費萬用字元? | 方式 |
|---|---|---|
| GetHTTPS | ✅ 是 | 透過 Let’s Encrypt 的 DNS-01 |
| ZeroSSL | ❌ 僅付費($10/月起) | — |
| SSL For Free | ❌ 不支援 | — |
| Certbot | ✅ 是 | DNS-01,需要命令列 + root 許可權 |
| acme.sh | ✅ 是 | DNS-01,需要命令列 |
GetHTTPS 是唯一一個提供免費萬用字元證書的瀏覽器端工具。無需安裝軟體、無需命令列、無需 root 許可權 — 只需要 DNS 訪問許可權。
常見錯誤
新增了 *.example.com 但忘了 example.com
萬用字元覆蓋子域名,但不覆蓋裸域名。如果你只獲取了 *.example.com,訪問 https://example.com(不帶 www)的使用者會看到證書錯誤。務必同時新增兩者。
沒有等待 DNS 傳播
DNS 變更可能需要 1-30 分鐘,具體取決於服務商和 TTL 設定。不要過早點選驗證 — GetHTTPS 的預檢會告訴你記錄何時可見。
建立了 CNAME 而不是 TXT 記錄
驗證記錄必須是 TXT 型別,不是 CNAME、A 或 AAAA。某些 DNS 管理介面預設選擇其他型別 — 儲存前請仔細確認。
殘留舊的 _acme-challenge 記錄
如果上一次證書留下了過時的 _acme-challenge TXT 記錄,請在新增新記錄前將其刪除。同一名稱下存在多條 TXT 記錄可能導致驗證失敗。
常見問題
*.example.com 是否覆蓋 example.com(裸域名)?
不覆蓋。*.example.com 的萬用字元證書覆蓋 www.example.com、blog.example.com 等,但不覆蓋 example.com 本身。在 GetHTTPS 中同時新增 *.example.com 和 example.com 即可覆蓋兩者。
是否覆蓋子子域名如 a.b.example.com?
不覆蓋。*.example.com 只覆蓋一級子域名。要覆蓋 *.sub.example.com,需要單獨申請一張萬用字元證書。
能從 ZeroSSL 免費獲取萬用字元證書嗎?
不能。ZeroSSL 的萬用字元證書僅限付費使用者。Let’s Encrypt(透過 GetHTTPS)免費提供萬用字元證書。
多久需要續簽一次?
每 90 天,與所有 Let’s Encrypt 證書相同。每次續簽都需要建立新的 DNS TXT 記錄。隨著即將實施的 47 天有效期限制(2029 年前),續簽頻率將會增加。
DNS-01 安全嗎?我要修改 DNS。
安全。你只是新增一條 TXT 記錄 — 這不會影響網站流量、郵件或任何其他 DNS 記錄。_acme-challenge 子域名是專門為 ACME 驗證設計的。