建立 Linux 上的 Let's Encrypt 萬用字元憑證 文章首圖

建立 Linux 上的 Let's Encrypt 萬用字元憑證

建立 Linux 上的 Let's Encrypt 萬用字元憑證

在現代 Web 安全架構中,HTTPS 已經是標配。雖然傳統的單域名憑證能滿足基本需求,但對於管理多個子網域(例如 api.example.comblog.example.com)的管理員來說,維護多張憑證不僅繁瑣,還容易忘記續約。這時,萬用字元憑證(Wildcard Certificate) 就成了最佳解方。它能讓 *.example.com 下的所有子網域共用同一張憑證,大幅簡化管理流程。

Let's Encrypt 提供的免費憑證服務支援萬用字元憑證,但與傳統憑證不同,它強烈建議使用 DNS 驗證方式,而非傳統的 HTTP-01 驗證。這意味著我們需要透過 DNS API 自動更新 TXT 記錄來證明對網域的控制權。在本文中,我們將使用最廣泛且穩定的 certbot 搭配 dns-route53 或通用的 dns-manual 模式(為確保通用性,本文將示範最通用的 DNS-01 手動驗證模式,此方法適用於任何 DNS 供應商,如 Cloudflare, AWS Route53, GCP DNS 等)。

前置環境準備

首先,請確保您的 Ubuntu 22.04 或 Debian 12 系統已安裝 certbot。由於官方倉庫中的版本可能較舊,建議從 Certbot 官方倉庫安裝最新版。

sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare
# 註:如果您使用 Cloudflare,請安裝 dns-cloudflare 插件。
# 若使用其他 DNS 供應商,可安裝對應插件,或完全使用手動模式。

為了示範通用性,我們這裡將展示如何使用 DNS-01 手動驗證,這不需要安裝特定的 DNS 插件,只要您能透過 API 或控制台修改 DNS 記錄即可。

步驟一:執行憑證申請

假設您的網域是 example.com,您希望憑證涵蓋 *.example.com。請執行以下指令:

sudo certbot certonly \
  --dns-manual \
  -d example.com \
  -d *.example.com

執行後,Certbot 會提示您輸入電子郵件地址並同意服務條款。接著,它會生成一個特定的 DNS TXT 記錄值,要求您手動添加到您的 DNS 供應商控制台。

輸出範例如下:


Please deploy a DNS TXT record under the name:
_acme-challenge.example.com. with the following value:
AbCdEfGhIjKlMnOpQrStUvWxYz1234567890

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -