网站的ssl泛域名证书前几天到期了,以前使用的ssl平台升级了,使用起来有点繁琐,所以这次采用acme.sh来实现自动签发泛域名+续期的功能。

1.安装acme.sh

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

使用国内源的acme,如果你可以流畅使用github,可以使用github源的acme
记得修改命令后边的邮箱

curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com

安装完成后重新打开ssh窗口

2.更新CA源

执行acme.sh命令

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

3.设置DNS 执行申请命令

把 ddddddddd.top 换成自己的一级域名
执行acme.sh命令

acme.sh --issue -d ddddddddd.top -d *.ddddddddd.top --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

执行完命令之后会返回下边的东西
image
我们需要将两个 TXT value 内的值进行解析

4.配置域名解析

找到你的域名注册商,然后添加两条TXT解析记录
image-1657726656222

5.生成证书

把 ddddddddd.top 换成自己的一级域名
执行acme.sh命令

acme.sh --renew -d ddddddddd.top -d *.ddddddddd.top --yes-I-know-dns-manual-mode-enough-go-ahead-please

不出意外你会看到证书生成的路径
image-1657726777469

6.快速复制到nginx配置下

把 ddddddddd.top 换成自己的一级域名
确保 /etc/nginx/ssl/ddddddddd.top 目录存在
执行acme.sh命令

acme.sh --installcert -d ddddddddd.top --key-file /etc/nginx/ssl/ddddddddd.top/ddddddddd.top.key --fullchain-file /etc/nginx/ssl/ddddddddd.top/ddddddddd.top.cer --reloadcmd "service nginx force-reload"

其实就是把证书cp过去~~

7.配置nginx ssl

创建 ssl.conf
把证书参数配置上

touch ssl.conf

ssl_certificate      /etc/nginx/ssl/ddddddddd.top/ddddddddd.top.cer;
ssl_certificate_key  /etc/nginx/ssl/ddddddddd.top/ddddddddd.top.key;

然后在nginx.conf里边 ssl server inlude一下

include /etc/nginx/ssl.conf;

8.自动续期

泛域名证书有效期是3个月的,acme.sh 在证书到期30天前的时候会自动帮你续期到你的ssl证书位置~
当然你也可以手动执行命令重新签发一次

acme.sh --cron -f

参考链接
Nginx conf引用配置include
acme.sh

Q.E.D.


今天也要加油鸭~