acme.sh 自动续签 SSL 证书

安装 acme.sh

安装位置:~/.acme.sh/

代码语言:javascript
复制
# 方法一
curl https://get.acme.sh | sh -s email=my@example.com

方法二

git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m xxxx@xxx.com

更新 acme.sh

代码语言:javascript
复制
# 手动升级
acme.sh --upgrade

自动升级

acme.sh --upgrade --auto-upgrade

关闭自动更新

acme.sh --upgrade --auto-upgrade 0

生成证书

acme.sh 支持两种方式验证域名所有权:HTTP 和 DNS

http 方式
代码语言:javascript
复制
指定域名,并指定网站的根目录,acme.sh会自动生成验证文件,放到网站的根目录,自动完成验证,验证完成后删除验证文件。
acme.sh --issue -d domain.com -d www.domain.com --webroot /usr/share/nginx/html/

如果是apache服务器,acme.sh智能的从apache配置中自动完成验证,不需要指定网站根目录。
acme.sh --issue -d domain.com --apache

如果是nginx服务器,acme.sh智能的从nginx配置中自动完成验证,不需要指定网站根目录
acme.sh --issue -d domain.com --nginx

如果还没有运行任何web服务,acme.sh还能个假装自己是一个web服务器,临时监听80端口,完成验证
acme.sh --issue -d domain.com --standalone

dns 方式(推荐)

这种方式不需要服务器和公网IP,只需要DNS的解析记录即可完成验证。

代码语言:javascript
复制
以阿里云为例,登录到阿里云控制台,生成Ali_Key 和 Ali_Secret
export Ali_key="xxxxxxxxx"
export Ali_Secret="xxxxxxxxxx"
acme.sh --issue --dns dns_ali -d domain.com -d www.domain.com # -d 后面是域名,也可以一次生成多个域名证书

也可以直接生成通配符证书

acme.sh --issue --dns dns_ali -d domain.com -d '*.domain.com'

证书生成完成之后 acme.sh 会自动保存 API_ID 和 APK KEY,保存到 ~/.acme.sh/account.conf,下次再使用时,不需要再指定AccessKey了。

安装证书

默认生成的证书都放在 ~/.acme.sh/DOMAIN/ 目录下,使用 –install-cert 命令,证书将会复制到相应的位置。

代码语言:javascript
复制
# Apache
acme.sh --install-cert -d domain.com --cert-file /etc/httpd/ssl/domain.com/cert.pem --key-file /etc/httpd/ssl/domain.com/key.pem --fullchain-file /etc/httpd/ssl/domain.com/fullchain.pem --reloadcmd "systemctl reload httpd"

Nginx

将证书复制到 /etc/nginx/ssl/domain.com/ 目录下,并重新加载 nginx
acme.sh --install-cert -d domain.com --key-file /etc/nginx/ssl/domain.com/key.pem --fullchain-file /etc/nginx/ssl/domain.com/cert.pem --reloadcmd "systemctl reload nginx"

更新证书

证书在 60 天后会自动更新,不需要任何操作

撤销删除证书

代码语言:javascript
复制
# 撤销一个证书
acme.sh --list
acme.sh --revoke -d domain.com

删除一个证书

acme.sh --list
acme.sh --remove -d domain.com