Modify by lyc at 2020-3-30
参考博文:
acme.sh github
使用acme.sh撸一个免费且自动更新的HTTPS证书
Let’s Encrypt之acme.sh

1.安装 acme.sh

安装

1
$ curl  https://get.acme.sh | sh

添加环境变量

1
2
3
4
$ vim /root/.bashrc
alias acme.sh=~/.acme.sh/acme.sh

source /root/.bashrc

2.生成证书

1
$ acme.sh  --issue -d test1.lyc7456.com  --webroot  /data/wwwroot/www.test.com/

这个命令的意思是用http方式将 test1.lyc7456.com 生成一个证书,--webroot 是你的网站根目录,(这个过程中acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后又自动删除验证文件)

3.copy证书到nginx ssl-key目录

  • 默认生成的证书都放在安装目录下 ~/.acme.sh/,这个目录不能让nginx直接使用,因为这个目录会变化的。
  • acme提供了--installcert 来安装证书,只需指定目标位置, 然后证书文件会被copy到相应的位置。
  • --reloadcmd "service nginx force-reload" acme自动更新时候能够重启nginx使得证书生效。
1
2
3
4
$ acme.sh  --installcert  -d  test1.lyc7456.com   \
--key-file /usr/local/nginx/conf/ssl-key/lyc7456.com.key \
--fullchain-file /usr/local/nginx/conf/ssl-key/lyc7456.com.cer \
--reloadcmd "service nginx force-reload"

crontab自动copy证书

1
2
3
4
5
6
7
$ cat /root/tdserver/nginx/acme_auto_renew_nginx.sh 
#!/bin/bash
# acme auto renew
/root/.acme.sh/acme.sh --installcert -d test1.lyc7456.com \
--key-file /usr/local/nginx/conf/ssl-key/lyc7456.com.key \
--fullchain-file /usr/local/nginx/conf/ssl-key/lyc7456.com.cer \
--reloadcmd "service nginx force-reload"
1
2
3
$ chmod +x /root/tdserver/nginx/acme_auto_renew_nginx.sh
$ crontab -l
30 5 15,25 * * /root/tdserver/nginx/acme_auto_renew_nginx.sh > /dev/null

4.生成 dhparam.pem 文件(可选)

1
$ openssl dhparam -out /usr/local/nginx/conf/ssl-key/dhparam.pem 2048

5.配置nginx

1
2
3
4
5
6
7
listen 443 ssl;
server_name test1.lyc7456.com;
ssl_certificate /usr/local/nginx/conf/ssl-key/lyc7456.com.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl-key/lyc7456.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /usr/local/nginx/conf/ssl-key/dhparam.pem;

6.证书更新

自动更新证书

  • Let’s Encrypt 的证书有效期是 90 天的,需要定期重新申请,不过acme在安装的时候就已经设置了自动更新,所以这一步不用关心,很省心。
  • 安装acme时会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
1
2
$ crontab -l
19 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

手动renew证书

1
acme.sh --cron -f

7.设置软件自动更新

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.所以为了省心省力,最好还是设置一下软件的自动更新,执行下面的命令就可以了。

1
2
$ crontab -l
7 7 * 1 * "/root/.acme.sh"/acme.sh --upgrade --auto-upgrade