官网地址

官方的地址是 acmesh-official/acme.sh

如何安装 acme.sh

官方的安装方式是

1
curl https://get.acme.sh | sh -s email=my@example.com

在国内如果因为网络环境安装失败,可以参考官方的教程Install in China · acmesh-official/acme.sh Wiki

记得在你的 ~/.bashrc 里面加一条 alias acme.sh=~/.acme.sh/acme.sh 这样就可以直接使用命令 acme.sh 来调用了

如何申请

这里我开始尝试直接用命令

1
acme.sh --issue -d mydomain.com --nginx

来申请证书,但是它告诉我我的 nginx 配置有问题,查阅英文版本的readme发现,应当使用命令

1
acme.sh  --issue  -d www.ericli.vip  --nginx /etc/nginx/nginx.conf

这样就可以正常获取了,但是这时候我遇到了一个问题,之前我用的是 certbot 来获取证书,这玩意需要 sudo 权限,所以当时我的nginx配置如下:

1
2
3
4
5
6
7
server {
listen 443 ssl;
server_name ericli.vip www.ericli.vip;
ssl_certificate /etc/letsencrypt/live/www.ericli.vip/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.ericli.vip/privkey.pem;
root /var/www/hexo;
}

而这个路径普通用户不可读,所以运行上面的指令会报错

于是我选择换命令

1
acme.sh --issue -d ericli.vip -d www.ericli.vip --webroot /var/www/hexo

用这个命令来获取证书

注意,这样获取的证书是放在 ~/.acme.sh/ericli.vip/ 下面的,而不是 ~/.acme.sh/www.ericli.vip/ 下面

安装证书

官方不建议直接使用 ~/.acme.sh/xxx 下面的证书,因为这里面的目录结构可能发生改变,所以推荐的方式是使用命令 acme.sh --install 系列来安装证书到另外的路径

这里我选择创建路径 ~/certs/www.ericli.vip/ 来存这里申请的证书,使用命令

1
mkdir -p ~/certs/xxx.example.com

创建对应的路径,然后使用命令

1
2
3
4
acme.sh --install-cert -d ericli.vip \
--key-file /home/eric/certs/www.ericli.vip/key.pem \
--fullchain-file /home/eric/certs/www.ericli.vip/cert.pem \
--reloadcmd "service nginx force-reload"

修改 Nginx 配置文件

修改nginx里面ssl相关配置,例如我的配置:

1
2
3
4
5
6
7
server {
listen 443 ssl;
server_name ericli.vip www.ericli.vip;
ssl_certificate /home/eric/certs/www.ericli.vip/cert.pem;
ssl_certificate_key /home/eric/certs/www.ericli.vip/key.pem;
root /var/www/hexo;
}

检查自动更新证书是否正确配置

使用命令

1
crontab  -l

应该能够看到形如

1
22 0 * * * "/home/eric/.acme.sh"/acme.sh --cron --home "/home/eric/.acme.sh" > /dev/null

的东西,这样就说明自动更新配置成功了