使用 acme.sh + Porkbun DNS API 自动生成和自动续期
适合场景
当前教程只适合在 Porkbun 网站上面购买的域名,在其他网站购买的域名估计也和这个差不多。
Porkbun 官网:https://porkbun.com/
- 你使用 Porkbun 的 DNS,并且可以获取 API key(API keys 在 Porkbun 控制台生成)
- 全自动:生成证书、自动续期、可执行服务重载
- 不需要 HTTP 验证,只需 DNS API 插入 TXT 记录
步骤概要
1)获取 Porkbun API key 和 secret
- 登录 Porkbun 控制台 → 账户设置 → API keys
- 记录 API key 和 Secret
- 还需要在域名配置那块打开 API 访问控制
2)安装 acme.sh
curlhttps://get.acme.sh|shsource~/.bashrcacme.sh 会自动安装定时任务检查并续期证书
3)配置 Porkbun API 凭证环境变量
可以将这个配置添加到 /etc/profile 里面:
exportPORKBUN_API_KEY="你的 API_KEY"exportPORKBUN_SECRET_API_KEY="你的 SECRET_KEY"注意:最新版必须使用api.porkbun.com作为 API 主机名
4)创建证书(DNS-01 验证)
acme.sh--issue--dnsdns_porkbun-dexample.com-d'*.example.com'--keylength2048--serverletsencrypt--days75--dns dns_porkbun表示使用 Porkbun DNS API 自动添加 TXT 记录-d后面可以根据需求添加多个域名或泛域名--days默认是 60 天自动更新证书,当前这个是指定 75 天更新证书(一般免费的证书有效期是 3 个月)
5)安装/部署证书到你的服务
acme.sh --install-cert-dexample.com\--key-file /etc/nginx/ssl/example.com.key\--fullchain-file /etc/nginx/ssl/example.com.crt\--reloadcmd"/root/.acme.sh/reload.sh"--key-file、--fullchain-file这两个的意思是将生成好的证书拷贝到指定的位置--reloadcmd指定证书到期后执行命令或者脚本(例如当前这个就是检查证书到 75 天后执行这个脚本)
证书到期后执行的脚本 reload.sh
#!/bin/bash# 重新加载 nginx 服务nginx-sreload# 其他服务(如果有)# systemctl reload another-service脚本需要添加执行权限:chmod +x reload.sh
acme.sh 默认会创建 cron 作业,每天检查证书有效期并自动续期,无需单独设置 crontab
自动设置的定时任务
这个是 acme 脚本自动设置的,可自行修改执行时间:
[root@zhaojj ~]# crontab -l470* * *"/root/.acme.sh"/acme.sh--cron--home"/root/.acme.sh">/dev/null