acme.sh 自动续签 SSL 证书

安装 acme.sh


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

1
2
3
4
5
6
7
8
9
10
11
# 进入根目录
cd ~

# 安装方法一
curl https://get.acme.sh | sh -s email=me@example.com

# 安装方法二
git clone https://github.com/acmesh-official/acme.sh.git .acme.sh

# 让acme.sh命令可以在任意目录都可执行
alias acme.sh=~/.acme.sh/acme.sh

更新 acme.sh


1
2
3
4
5
6
7
8
# 手动升级
acme.sh --upgrade

# 自动升级
acme.sh --upgrade --auto-upgrade

# 关闭自动更新
acme.sh --upgrade --auto-upgrade 0

生成证书


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

dns 方式(推荐)

这种方式不需要服务器和公网IP,只需要DNS的解析记录即可完成验证,但是需要配置一次apikey

腾讯云

dnspod创建Token地址

1
2
3
4
5
6
7
8
9
export DP_key="xxxxxxxxx"
export DP_Secret="xxxxxxxxxx"
acme.sh --issue --dns dns_dp -d www.domain.com # -d 后面是域名,也可以一次生成多个域名证书

# 也可以一次生成多个域名证书
acme.sh --issue --dns dns_ali -d www.domain.com -d test.domain.com

# 也可以直接生成通配符证书
acme.sh --issue --dns dns_ali -d www.domain.com -d '*.domain.com'

阿里云

1
2
3
export Ali_key="xxxxxxxxx"
export Ali_Secret="xxxxxxxxxx"
acme.sh --issue --dns dns_ali -d www.domain.com

http 方式

1
2
3
4
5
6
7
8
9
10
11
# 指定域名,并指定网站的根目录,acme.sh会自动生成验证文件,放到网站的根目录,自动完成验证,验证完成后删除验证文件。
acme.sh --issue -d www.domain.com --webroot /usr/share/nginx/html/

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

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

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

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

Nginx配置SSL证书


请参考以下配置修改自己域名的配置文件,不要直接复制!!!记得修改域名和证书和密钥的目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80;
listen 443 ssl;
server_name www.domain.com;
root /www/default;

#----------- HTTPS -----------#
#强制HTTPS
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#SSL相关配置
ssl_certificate /存放证书的目录/www.domain.com.crt;
ssl_certificate_key /存放密钥的目录/www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
}

安装证书


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

1
acme.sh --install-cert -d www.domain.com --fullchain-file /存放证书的目录/www.domain.com.crt --key-file /存放密钥的目录/www.domain.com.key --reloadcmd "docker restart nginx"

--reloadcmd 证书安装完成后执行的命令。比如我的Nginx是在docker里运行的,我就改为了docker restart nginx来重启Nginx。如果你是直接安装的Nginx可以改为systemctl reload nginx来重启Nginx

更新证书

手动更新

在生成证书的命令上加一个 --force表示更新证书


1
acme.sh --issue --force --dns dns_dp -d git.imeepo.com

定时任务

每天凌晨3点查看域名ssl是否到期

1
2
3
crontab -e

0 3 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

撤销删除证书


1
2
3
4
5
6
7
# 撤销一个证书
acme.sh --list
acme.sh --revoke -d www.domain.com

# 删除一个证书
acme.sh --list
acme.sh --remove -d www.domain.com

本文参考 官方Wiki 由本人整理并实测后发布,仅供参考,一切以 官方Wiki 为准。