文章内容
2025/11/3 0:18:06,作 者: 黄兵
certbot 申请 *.us-west.obs.example.com 的通配符证书
最近需要通配符证书,看了一下一年的通配符证书都非常贵,而且并不是您购买了通配符证书,这个域名的所有三级,四级域名都可以使用。
✅ 一、通配符证书的匹配规则
根据 RFC 6125 标准和各大 CA 的实际实现,
通配符证书(Wildcard SSL) 的匹配规则如下:
| 通配符证书 | 可以匹配的域名 | 不能匹配的域名 |
|---|---|---|
*.example.com |
✅ images.example.com✅ obs.example.com |
❌ images-1.us-west.obs.example.com❌ deep.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(推荐方式)
-
进入 My Profile → API Tokens → Create Token
-
选择 “Edit zone DNS” 模板
-
权限配置:
-
Zone → DNS → Edit
-
Zone → Zone → Read
-
-
Zone Resources:
-
Include → Specific Zone → 选择你的 example.com
-
-
创建后复制生成的
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️⃣ | 安装 certbot 与 python3-certbot-dns-cloudflare |
| 3️⃣ | 在 /etc/letsencrypt/cloudflare.ini 配置 Token |
| 4️⃣ | 运行 certbot 命令申请证书 |
| 5️⃣ | 配置 Nginx 使用生成的证书 |
| 6️⃣ | 测试续期 certbot renew --dry-run |
这样就完成了使用 certbot 申请通配符证书的相关操作,是不是很简单。
评论列表