文章内容

2025/11/3 0:18:06,作 者: 黄兵

certbot 申请 *.us-west.obs.example.com 的通配符证书

最近需要通配符证书,看了一下一年的通配符证书都非常贵,而且并不是您购买了通配符证书,这个域名的所有三级,四级域名都可以使用。

✅ 一、通配符证书的匹配规则

根据 RFC 6125 标准和各大 CA 的实际实现,
通配符证书(Wildcard SSL) 的匹配规则如下:

通配符证书 可以匹配的域名 不能匹配的域名
*.example.com images.example.comobs.example.com images-1.us-west.obs.example.comdeep.sub.example.com
*.obs.example.com images-1.obs.example.com images-1.us-west.obs.example.com
*.us-west.obs.example.com images-1.us-west.obs.example.com a.b.us-west.obs.example.com

⚠️ 二、核心规则总结

  • 通配符 * 只能匹配一级子域名
    比如:*.example.com 只能匹配 x.example.com
    不能匹配更深层的 x.y.example.com

  • 如果你的域名是:

    images-1.us-west.obs.example.com
    

    那它的层级是:

    └─ example.com
        └─ obs.example.com
            └─ us-west.obs.example.com
                └─ images-1.us-west.obs.example.com
    

    总共有 4 级子域。

也就是说,如果要匹配:*.us-west.obs.example.com 这种域名,通配符还是十分的麻烦,如果像亚马逊一样有多个区,也需要购买多个通配符证书:

  • *.us-west.obs.example.com
  • *.us-east.obs.example.com
  • *.us-west.cvm.example.com

这都需要购买不同的通配符域名,通配符域名价格比较高,这样我们实在是承受不起,于是我们需要其它的替代方案。

这篇文章:通过 Let's Encrypt 自动续订证书,详细介绍了使用 Certbot 申请免费证书,介绍的都是单域名证书。

询问 ChatGPT Certbot 也支持通配符域名证书,而且是免费的。

Ubuntu 22.04 上使用 certbot + Cloudflare DNS 签发通配符证书 *.us-west.obs.example.com

🧩 一、前提条件

你需要满足以下条件:

项目 说明
✅ 已在 Cloudflare 托管 example.com 域名 必须在 Cloudflare DNS 管理中看到 us-west.obs.example.com
✅ 已安装 Nginx 通常路径 /etc/nginx
✅ 能在服务器上运行 sudo 命令 certbot 需要 root 权限
✅ Cloudflare API Token 用于自动添加 _acme-challenge TXT 记录

🪪 二、创建 Cloudflare API Token(推荐方式)

  1. 登录 Cloudflare Dashboard

  2. 进入 My Profile → API Tokens → Create Token

  3. 选择 “Edit zone DNS” 模板

  4. 权限配置:

    • Zone → DNS → Edit

    • Zone → Zone → Read

  5. Zone Resources:

    • Include → Specific Zone → 选择你的 example.com

  6. 创建后复制生成的 API Token

⚙️ 三、安装 Certbot 及 Cloudflare 插件

sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare -y

🔐 四、配置 Cloudflare 凭证文件

创建凭证文件:

sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/cloudflare.ini

写入以下内容(替换为你的实际 Token):

dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN

保存后执行:

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

🚀 五、申请通配符证书

执行以下命令申请:

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
  -d "*.us-west.obs.example.com" -d "us-west.obs.example.com"

💡 说明:

  • certonly 表示只生成证书,不自动配置 Nginx;

  • -d "*.us-west.obs.example.com" 申请通配符;

  • -d "us-west.obs.example.com" 额外包含根域名。

📁 六、证书生成路径

生成后证书通常位于:

/etc/letsencrypt/live/us-west.obs.example.com/fullchain.pem
/etc/letsencrypt/live/us-west.obs.example.com/privkey.pem

你可以在 Nginx 中这样使用:

server {
    listen 443 ssl;
    server_name *.us-west.obs.example.com;

    ssl_certificate     /etc/letsencrypt/live/us-west.obs.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/us-west.obs.example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
    }
}

🔁 七、自动续期(Let’s Encrypt 90 天)

Certbot 会自动添加续期任务:

sudo systemctl list-timers | grep certbot

或者手动测试续期:

sudo certbot renew --dry-run

🧠 八、验证

完成后执行:

sudo nginx -t
sudo systemctl reload nginx

然后在浏览器访问:

https://images-1.us-west.obs.example.com

即可看到由 Let’s Encrypt 签发的安全证书。

✅ 总结

步骤 内容
1️⃣ 创建 Cloudflare API Token(DNS 编辑权限)
2️⃣ 安装 certbotpython3-certbot-dns-cloudflare
3️⃣ /etc/letsencrypt/cloudflare.ini 配置 Token
4️⃣ 运行 certbot 命令申请证书
5️⃣ 配置 Nginx 使用生成的证书
6️⃣ 测试续期 certbot renew --dry-run


这样就完成了使用 certbot 申请通配符证书的相关操作,是不是很简单。

分享到:

发表评论

评论列表