使用 Let’s encrypt 证书,实现自动续签。

3,846 阅读1分钟

首先感谢 Let’s encrypt 证书,部署十分简单、自动化并且免费。 本站基于 github 上的开源项目 acme.sh, 使用 Use Nginx mode申请Let’s encrypt证书。通过脚本加入 crontab 定时计划自动更新。

1.在线安装

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

Or

wget -O -  https://get.acme.sh | sh 

其他更多安装方法参考 How to install

设置别名
acme.sh=~/.acme.sh/acme.sh
创建 crontab 更新证书
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

创建证书

选择使用 Use Nginx mode 来创建证书。 如下:

acme.sh --issue --nginx -d www.cxiang.net 

这样在目录/root/.acme.sh/www.cxiang.net/ 会生成证书。主要证书和私钥:

www.cxiang.net.cer    
www.cxiang.net.key

配置证书

server{
        listen       443 ssl http2;
        server_name  www.cxiang.net;
        root         /usr/wwwroot/cxiang;
        index index.php index.html ;
        ssl_certificate "/root/.acme.sh/www.cxiang.net/www.cxiang.net.cer";
        ssl_certificate_key "/root/.acme.sh/www.cxiang.net/www.cxiang.net.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        }

可以通过 nginx 里面的 Rewrite 规则实现所有请求都走 https 访问 :

 rewrite ^(.*)$ https://$host$1 permanent;

自动更新

创建 upssl.sh 脚本:

#!/bin/bash
/root/.acme.sh/acme.sh  --renew --force --issue --nginx -d  www.cxiang.net --reloadcmd  "systemctl reload nginx" 

脚本可执行权限:

chmod +x upssl.sh     

conrtab任务:

0 3 15 * * root `/usr/local/upssl.ssh > /dev/null`   

凌晨 3 点每半个月自动更新证书,reload nginx