acme.sh 申请 Let’s Encrypt 通配符证书完全指南
什么是 acme.sh?
acme.sh 是一个纯 shell 脚本实现的 ACME 客户端,用于自动化申请和管理 Let’s Encrypt 等 CA 颁发的 SSL 证书。
特点:
- 纯 shell 脚本,无依赖
- 支持多种 DNS 提供商 API
- 自动续期(cron job)
- 支持通配符证书
安装 acme.sh
|
|
💡 提示:安装时提示 socat 警告可以忽略,如果你使用 DNS 验证方式,不需要 socat。
设置默认 CA 为 Let’s Encrypt
acme.sh 默认使用 ZeroSSL(需要邮箱注册),推荐切换到 Let’s Encrypt:
|
|
使用 Cloudflare API Token 申请证书
获取 Cloudflare API Token
- 登录 Cloudflare Dashboard
- 右上角头像 → My Profile
- 左侧 API Tokens → Create Token
- 选择 Edit zone DNS 模板
- 配置:
- Zone - DNS - Edit
- Zone Resources: Specific zone → 选择你的域名
- 创建并复制 Token(只显示一次!)
配置 Token
|
|
📝 注意:现在只需要
CF_Token,不再需要CF_Email和CF_Key!这是新版本的改进。
密钥类型:ECC vs RSA
在申请证书前,了解密钥类型非常重要。acme.sh 支持多种密钥类型。
ECC 和 RSA 对比
| 特性 | RSA | ECC |
|---|---|---|
| 密钥长度 | 2048-4096 位 | 256-384 位 |
| 安全性 | RSA 2048 ≈ ECC 256 | 同等安全,更短密钥 |
| 性能 | 较慢 | 更快(2-3倍) |
| 握手速度 | 慢 | 快 |
| 证书大小 | 较大 | 更小 |
| 兼容性 | 100% | 极少老设备不支持 |
🏆 推荐:ECC 256(acme.sh 默认)
支持的密钥类型
|
|
💡 提示:如果不指定
--keylength,acme.sh 默认使用 ECC 256,这是目前最佳选择。
如何选择?
- 现代网站 → ECC 256(默认,无需指定)
- 需要兼容古老设备 → RSA 2048
- 金融/政府等高安全需求 → ECC 384
申请通配符证书
|
|
⚠️ 重要:
*.example.com需要用引号包裹,避免被 shell 展开。
参数说明:
--issue:申请证书--dns dns_cf:使用 Cloudflare DNS API 验证-d example.com:主域名-d "*.example.com":通配符域名
安装证书到指定目录
申请成功后,将证书安装到你的服务使用的目录:
|
|
参数说明:
--key-file:私钥保存路径--fullchain-file:完整证书链保存路径--reloadcmd:证书更新后执行的命令(重载服务)
自动续期
acme.sh 安装时会自动创建 cron job,每天检查证书是否需要续期。
查看 cron job:
|
|
手动强制续期:
|
|
验证证书
检查证书信息:
|
|
检查 SAN(通配符域名):
|
|
常见问题
Q: 为什么不需要 CF_Email 了?
A: 新版本的 Cloudflare API 支持使用 API Token 代替 Global API Key。Token 权限更精细、更安全,只需要 CF_Token 一个变量。
Q: 通配符证书为什么需要 DNS 验证?
A: Let’s Encrypt 要求通配符证书必须通过 DNS-01 验证。HTTP-01 和 TLS-ALPN-01 不支持通配符。
Q: 证书续期是重新申请还是延期?
A: 重新申请。每次续期都会生成一个全新的证书,有效期从续期日开始算 90 天。acme.sh 默认在到期前 30 天自动续期。
Q: 证书文件在哪里?
A: 默认存储在 ~/.acme.sh/域名_ecc/ 目录下:
fullchain.cer:完整证书链域名.key:私钥
总结
| 步骤 | 命令 |
|---|---|
| 安装 | curl https://get.acme.sh | sh |
| 设置 CA | acme.sh --set-default-ca --server letsencrypt |
| 配置 Token | export CF_Token="xxx" |
| 申请证书 | acme.sh --issue --dns dns_cf -d example.com -d "*.example.com" |
| 安装证书 | acme.sh --install-cert -d example.com ... |
使用 acme.sh + Cloudflare API Token,你可以轻松实现 SSL 证书的自动化管理,再也不用担心证书过期了!