Skip to content

acme.sh 使用记录 #138

Open
Open
@Bpazy

Description

@Bpazy

这里记录一些我的使用 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 restart nginx"

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

  1. 关闭 nginx
  2. 开启 nginx

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

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

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

触发 Let's Encrpty 的 Rate limit 怎么办

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

提示 Failed to connect to dns.google port 如何解决?

使用参数 --dnssleep 300acme.sh 默认情况会使用 google dns 来验证是否生效,该参数可以跳过该验证,文档: dnssleep

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions