使用 acme.sh 申请和自动续签 SSL 证书

使用acme.sh申请和自动续签 SSL 证书,项目地址:acme.sh

安装

1
2
3
4
5
6
## 安装
## 其中的`[email protected]`修改为你的邮箱地址
curl https://get.acme.sh | sh -s [email protected]

## 使acme.sh命令的alias立即在当前终端会话可用
source ~/.bashrc

申请证书

申请证书时需要验证你的域名所有权,这里以DNS-01 challenge为例,这种方式将使用域名解析商提供的API自动验证。如你使用 DNSPod,可以在 DNSPod Token 中生成 ID 和 Key。

1
2
3
4
5
6
## 指定 DNSPod API
export DP_Id='XXX'
export DP_Key="XXXXXXXXXXXXXXX"

## 申请证书
acme.sh --issue --dns dns_dp -d exp.com

部署证书

部署证书基本上就是将密钥文件(key file)和证书文件(certificate file)复制到相应的目录,然后重启相关软件进行加载。

1
2
3
4
5
6
7
8
9
10
## 传统部署方式,如nginx
acme.sh --install-cert -d exp.com \
--key-file /path/key.pem \
--fullchain-file /path/cert.pem \
--reloadcmd "service nginx force-reload"

## deploy-hook方式,如haproxy
export DEPLOY_HAPROXY_PEM_PATH=/etc/haproxy/certs
export DEPLOY_HAPROXY_RELOAD="systemctl restart haproxy"
acme.sh --deploy -d exp.com --deploy-hook haproxy

自动续签证书

申请证书的参数和部署证书的参数会自动记录下来,如果同一个域名执行了多此,以最后一次记录的参数为准,到期前1个月会自动更新。

其他

申请通配符证书(通配符只支持 DNS-01 challenge

1
acme.sh --issue --dns dns_dp -d *.exp.com

将多个域名申请到同一张证书里面

1
acme.sh --issue --dns dns_dp -d a.exp.com -d b.exp.com

指定CA颁发机构(默认为 ZeroSSL

1
acme.sh --issue --dns dns_dp -d exp.com --server letsencrypt

自动更新acme.sh软件

1
acme.sh --upgrade --auto-upgrade

卸载acme.sh

1
2
acme.sh --uninstall
rm -rf ~/.acme.sh/

查看证书列表

1
acme.sh list

删除证书

1
acme.sh --remove -d exp.com