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
/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证书
7.设置软件自动更新
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.所以为了省心省力,最好还是设置一下软件的自动更新,执行下面的命令就可以了。
1 2
| $ crontab -l 7 7 * 1 * "/root/.acme.sh"/acme.sh --upgrade --auto-upgrade
|