acme.sh 备忘录
这是一个备忘录,起速查表的作用。没有什么技术含量。
acme.sh 是一个开源的纯 shell 脚本编写的 acme 客户端,可自动申请更新 https 证书。相比其他工具,acme.sh 更轻量,主要表现在:
- 只是一个脚本,无需编译安装。
- 无侵入性,不会更改任何 web server 的配置。
修改 CA
acme.sh 默认 CA 是 ZeroSSL,可是在申请证书时添加 --server
参数临时修改。
修改默认 CA 执行(修改为 let's encrypt):
acme.sh --set-default-ca --server letsencrypt
申请证书
已有 web server
acme.sh --issue -d example.com -w /www/wwwroot/example.com
-w
后为 vhost public 根目录。- 如需一个证书包含多个域名可传递多个
-d
参数。
默认申请的证书保存在 ~/.acme.sh/example.com/
,但不要直接用于部署,这个目录的结果可能会随时改变。
DNS Alias
若希望自动化通过 DNS 来验证(根域名必须使用 DNA 验证),但 DNS 服务商没有提供 API 该咋办呢?如果我们恰好还有一个域名,它的 DNS 服务商恰好支持 API,那就好办了。
假设要为 example.com
申请证书,proxy.com
是我们拥有的另一个域名,支持 API 设置 DNS。
-
添加
_acme-challenge.example.com
的 CNAME 记录,指向_acme-challenge.proxy.com
。 -
使用 alias mode 验证。
acme.sh --issue \ -d example.com --challenge-alias proxy.com --dns {your dns provider}
上面的方法要求代理域名的主机名也必须是 _acme-challenge
,当然也可以自定义这个名称。
假设现在我们设置 _acme-challenge.example.com -> custom.proxy.com
,那么申请证书时使用 --domain-alias
参数就行了:
acme.sh --issue \
-d example.com --domain-alias custom.proxy.com --dns {your dns provider}
--challenge-alias
:只需指定域名,主机名默认为_acme-challenge
。--domain-alias
:需要指定 FQDN(主机名+域名),可以自定义主机名。
部署证书
Nginx:
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
- acme.sh 不会修改 nginx 配置,所以需要自己设置好。
- 部署时将保留现有目标文件的权限。所以如果有需求,先手动部署一般设置好权限。
--reloadcmd
用于部署完成后刷新 web server。
其他命令
更多命令帮助执行 acme.sh --help
查看。
手动续期
acme.sh --renew -d example.com --force [--ecc]
不再续期
acme.sh --remove -d example.com [--ecc]
此命令不会删除证书文件
查看活跃的证书列表
acme.sh --list
License:
禁止转载到非自托管的内容平台,禁止用于 AI 训练