通配符 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 验证设计的。