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
 | 
添加环境变量
| 12
 3
 4
 
 | $ vim /root/.bashrcalias 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使得证书生效。
| 12
 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证书
| 12
 3
 4
 5
 6
 7
 
 | $ cat /root/tdserver/nginx/acme_auto_renew_nginx.sh #!/bin/bash
 
 /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"
 
 | 
| 12
 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
| 12
 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 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
| 12
 
 | $ crontab -l19 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
 
 | 
手动renew证书
7.设置软件自动更新
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.所以为了省心省力,最好还是设置一下软件的自动更新,执行下面的命令就可以了。
| 12
 
 | $ crontab -l7 7 * 1 * "/root/.acme.sh"/acme.sh  --upgrade  --auto-upgrade
 
 |