acme.sh 使用记录

官方安装和使用文档:https://github.com/Neilpang/acme.sh/wiki/说明

HTTP 方式生成证书

该方法生成的证书不支持泛域名。
还有一点,acme.sh 检测的 nginx 配置文件必须位于 /etc/nginx/sites-enabled 下。

acme.sh --issue -d cdn.example.com --nginx

发现的问题

acme.sh 并不能增量的增加子域名,如现在已有 a.example.com 的证书,想要增加 b.example.com,该脚本就会替换现有的 fullchain.cer 文件,从而导致之前的证书失效。
所以想要添加子域名 b.example.com 的话,要同时创建 a.example.com 和 b.example.com,当子域名数量过多的话,就会触发 Let's Encrypt 的速率限制,比较恶心。

DNS 方式生成证书

该方法生成的证书支持泛域名,从长远角度考虑比较方便,笔者最终采用的就是这种方法。

DNS 方式简单来说就是需要你在 DNS 解析上增加一个 TXT 记录,用于表明该域名归属于你。
但这里有个问题:Let’s Encrypy 的证书 3 个月后就会过期,难不成每 3 个月都重新手动操作一遍吗?这也违背了 acme.sh 脚本的初衷。所以这里需要利用 DNS 服务商的 API,这样 acme.sh 可以自动的完成这一切。每一家 DNS 的具体配置方式不一致,请自行查阅官方文档:https://github.com/Neilpang/acme.sh/wiki/dnsapi

export CF_Key="***************************"
export CF_Email="******@163.com"
acme.sh --issue --dns dns_cf -d example.com -d *.example.com

安装证书

acme.sh --installcert -d example.com \
  --key-file /etc/nginx/ssl/example.com.key \
  --fullchain-file /etc/nginx/ssl/fullchain.cer \
  --reloadcmd "systemctl force-reload nginx"

注意这里的 reloadcmd 参数,这是 nginx 重启的命令,如果你没有使用 systemd 或者说你是直接用的 nginx 命令,那请修改对应的命令为:

  1. 关闭 nginx
  2. 开启 nginx

因为 nginx -s reload 命令并不能重新加载证书。

遇到的一些其他问题

怎么避免连续多次失败触发 Rate limit ?

运行 acme.sh 的时候加上参数 --test

触发 Let’s Encrpty 的 Rate limit 怎么办?

可以删除 ~/.acme.sh 再重新安装操作。

发布了108 篇原创文章 · 获赞 15 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章