仅作记录,以备后用

我的域名是在腾讯云买的,DNS也是用的腾讯云DNSPod,所以一开始申请SSL证书的时候也顺理成章地在DNSPod上弄的
但是DP只有单域名免费证书,而且有效期从原来的一年缩减至了三个月
到期在即,就干脆换成了Let’s Encrypt的泛域名证书,使用acme.sh自动更新证书

安装acme.sh

推荐使用root用户安装,因为网站一般是部署在/var/www/下面,涉及权限

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

修改CA服务器为Let’s Encrypt

1
acme.sh --set-default-ca --server letsencrypt

生成证书

acme.sh验证分http验证和dns验证,我是在已有SSL配置的基础上,修改证书,且是要泛域名证书,所以我选择的是自动DNS验证。
http验证简单说一下

1
2
3
4
# webroot模式
acme.sh --issue -d example.com -w /home/wwwroot/example.com
# nginx模式
acme.sh --issue -d example.com --nginx /etc/nginx/sites-enabled/example.com.conf

申请DNS API

以DNSPod为例,创建一个API,记下Id和Token,写入环境变量

1
2
export DP_Id="12345"
export DP_Key="token"

生成证书

1
acme.sh --issue --dns dns_dp -d *.example.com

安装证书

acme.sh配置

1
2
3
4
5
# Nginx
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/cert/*.example.com/*.example.com.key \
--fullchain-file /etc/nginx/cert/*.example.com/fullchain.cer \
--reloadcmd "systemctl force-reload nginx"

至此,acme.sh已经记录下所有参数(包括DNS API Id&Token),将来证书快过期的时候就会自动更新,把证书copy到指定的目录下,并让nginx重载证书

修改Nginx配置

接下来只要修改Nginx读取的证书就可以了 因为我是替换而不是初次配置

1
2
3
# 需要修改的地方
ssl_certificate /etc/nginx/cert/*.example.com/fullchain.cer;
ssl_certificate_key /etc/nginx/cert/*.example.com/*.example.com.key
1
2
3
4
5
6
7
# 我个人的更完整的SSL相关配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/cert/*.example.com/fullchain.cer;
ssl_certificate_key /etc/nginx/cert/*.example.com/*.example.com.key;
ssl_session_timeout 5m;

然后Nginx重载一下证书就好了


一个平平无奇的人