1、安装 acme.sh
$ cd /opt
$ curl https://get.acme.sh | sh
说明:由于github的原因,如果下载慢,可以查看这里 https://github.com/acmesh-official/acme.sh/releases,下载tar.gz文件后传到服务器里
通过命令安装,最终的安装目录是:~/.acme.sh/
2、设置软链接
$ alias acme.sh=~/.acme.sh/acme.sh
说明:acme.sh会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
3、生成证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证,这里仅介绍 DNS 方式
3.1、使用token创建
说明:这里以阿里云为例,其他云服务器可查看 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi
修改 /etc/profile
$ vim /etc/profile
在末尾添加:
export Ali_Key="***"
export Ali_Secret="***"
替换成你自己的,获取请查看 https://ak-console.aliyun.com/#/accesskey
使修改生效:
$ source /etc/profile
创建证书:
$ acme.sh --issue --dns dns_ali -d example.com -d *.example.com
说明:其中的example.com为你要创建泛域名证书的“根域名”
例如:a.com,则后面的参数为:*.a.com;
sub.a.com,则后面的参数为:*.sub.a.com
Ali_Key 和 Ali_Secret 将被保存在 ~/.acme.sh/account.conf , 命令中 dns_ali 指明使用 阿里的dns
本命令将自动为您生成一条txt类型的dns解析记录,在验证成功后,会删掉。该过程全自动。
证书成功生成后的默认目录为:~/.acme.sh/example.name/,如果要自定义输出目录,可在本命令中加参数:-w /etc/letsencrypt/example.com
其中要用到的两个文件为:example.com.cer和example.com.key
3.2、添加一条 txt 解析记录
$ acme.sh --issue --dns -d example.com -d *.example.com
输出的解析记录示例如下:
Multi domain='DNS:bitcat.cc,DNS:*.example.com'
Getting domain auth token for each domain
Getting webroot for domain='example.com'
Getting webroot for domain='*.example.com'
Add the following TXT record:
Domain: '_acme-challenge.example.com'
TXT value: '<ACME_CHALLENGE_STRING>'
Please be aware that you prepend _acme-challenge. before your domain
so the resulting subdomain will be: _acme-challenge.example.com
Please add the TXT records to the domains, and retry again.
Please add '--debug' or '--log' to check more details.
See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
记录下其中的 <ACME_CHALLENGE_STRING>
并前往你的 DNS 服务提供商,为主机名 _acme-challenge
添加一条 TXT 记录,内容即为上述的 <ACME_CHALLENGE_STRING>
。提交后可以等待一小段时间以便让 DNS 生效。
重新申请签发证书:
$ acme.sh --renew --dns -d example.com -d *.example.com
注意参数 --renew
4、更新证书
通过以上两种方式创建的证书有效期是90天,到期会自动更新
5、更新acme.sh
手动更新 :
$ acme.sh --upgrade
自动更新:
$ acme.sh --upgrade --auto-upgrade
关闭自动更新:
$ acme.sh --upgrade --auto-upgrade 0