ACME:通过DNS方式添加证书
在通常情况下,用DNS API方式自动注册证书是最好的方式,但是如果域名服务商不支持API方式,然后又想注册泛域名的话,就只能通过DNS手动方式来操作。
首先第一步,调用 issue 参数来生成txt值
(在做这一步前,请先确认在~/.acme.sh/<domain>目录中,是否存在过期的key文件,如果有,需要先删除整个domain目录,否则key文件不会被更新)
sudo ~/.acme.sh/acme.sh --issue --force -d *.domain.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
该命令会生成类似
[Wed Dec 21 03:32:02 UTC 2022] Domain: '_acme-challenge.domain.com'
[Wed Dec 21 03:32:02 UTC 2022] TXT value: 'xxxxxx'
这样的结果。
第二步,在域名管理里面,添加txt记录,key是 _acme-challenge,值就是 TXT value。
稍等片刻,然后用命令验证该txt值是否生效。
nslookup -type=txt _acme-challenge.domain.com
如果看到的 text 是之前填入的 TXT value,就说明设置生效。
第三步,生成证书。sudo ~/.acme.sh/acme.sh --renew -d *.domain.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
正常情况下,结果中就会显示证书的生成位置,然后执行证书安装命令就可,可以参照官方文档。
https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
ex:
acme.sh --install-cert -d *.domain.com \
--key-file /etc/nginx/cert/keyfile/in/nginx/xxx-key.pem \
--fullchain-file /etc/nginx/cert/fullchain/nginx/xxx-cert.pem \
--reloadcmd "service nginx force-reload"