发布作者: admin
百度收录: 正在检测是否收录...
作品采用: 《 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 》许可协议授权
适用场景:域名在腾讯云购买、DNS 解析托管在 DNSPod,网站使用雷池 WAF(SafeLine)社区版 ≥ 7.2.0 做反向代理,希望为域名(含泛域名 *.example.com)自动获取 Let's Encrypt 免费证书,并自动部署到雷池,实现 90 天自动续期、零人工干预。最终效果:acme.sh 每天自动检查证书有效期,到期前 30 天自动续签,并将新证书写入雷池证书目录、自动 reload Nginx,全程无需人工操作。
DNSPod API Token:在 DNSPod 控制台 → 用户中心 → 安全设置 → API Token 中创建。
dns_dp 插件。example.com 等保留域名。这一步是为了让雷池在宿主机生成证书文件占位,后续 acme.sh 才能覆盖写入。
ls /data/safeline/resources/nginx/certs/你会看到类似 cert_1.crt 和 cert_1.key 的文件,记下编号(例如 cert_1),后续步骤会用到。
curl https://get.acme.sh | sh -s email=you@example.com
source ~/.bashrcexport DP_Id="你的DNSPod Token ID(纯数字)"
export DP_Key="你的DNSPod Token 字符串"注意:此环境变量只在当前终端会话有效。acme.sh 签发成功后会把 Token 保存进域名配置文件,后续续期无需再次 export。
acme.sh --set-default-ca --server letsencryptacme.sh --issue --dns dns_dp \
-d example.com \
-d '*.example.com' \
--accountemail "your_real_email@example.com" \
--debug 2参数说明:
-d example.com:包含根域名。-d '*.example.com':包含所有一级子域名(注意单引号防止 shell 展开)。--accountemail:必须使用真实邮箱,否则 Let's Encrypt 会拒绝注册。--debug 2:可选,用于查看详细日志。如果一切顺利,会看到 Cert success.,证书文件保存在 ~/.acme.sh/example.com_ecc/ 下。
acme.sh --install-cert -d example.com \
--key-file /data/safeline/resources/nginx/certs/cert_1.key \
--fullchain-file /data/safeline/resources/nginx/certs/cert_1.crt \
--reloadcmd "docker exec safeline-tengine nginx -s reload"cert_1 替换为你在第 1 步中看到的实际编号。echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -subject -dates正常输出类似:
subject=CN = example.com
notBefore=Aug 20 01:31:33 2026 GMT
notAfter=Nov 18 01:31:32 2026 GMTexample.com、test.com 等保留域名作为联系邮箱,必须使用真实邮箱(QQ、Gmail 等均可)。*.,即 -d example.com -d '*.example.com',缺一不可;*. 必须加单引号。cert_1 是示例,实际编号取决于你在雷池中上传的顺序,可通过 ls /data/safeline/resources/nginx/certs/ 确认。--dnssleep 120 让 acme.sh 等待更长时间再验证。AuthFailure.SecretIdNotFounddns_tencent 插件。dns_dp 插件,并设置 DP_Id 和 DP_Key 环境变量。Error validating contact(s) :: contact email has forbidden domain "example.com"you@example.com,该域名被 Let's Encrypt 列入黑名单。--accountemail 参数指定真实邮箱,或修改 account.conf 中的 ACCOUNT_EMAIL。export ACCOUNT_EMAIL,请求中仍然使用旧邮箱。rm -rf /root/.acme.sh/ca/acme-v02.api.letsencrypt.orgAll checks succeeded 后长时间无反应。--dnssleep 120。Reload successful 但证书未生效。openssl s_client 查询结果为准。login_token invalid。DP_Id 和 DP_Key,然后执行测试:acme.sh --renew -d example.com --force执行以下命令,确认 cron 任务已添加:
crontab -l | grep acme输出应包含类似:
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null此后,证书将在到期前 30 天自动续期并部署,无需再手动操作。如需手动模拟续期,可运行:
acme.sh --renew -d example.com --force教程结束。替换文中的 example.com、Token、邮箱、证书编号为你的实际值即可直接使用。
—— 评论区 ——