域名证书过期续期一直是个麻烦事,尤其是具有多个域名的情况下,且freessl上免费泛域名只提供三个月有效期,到期就要重新申请,比较繁琐。freessl提供了acme自动化续期功能,是完全免费的,可以配合acme.sh实现域名自动管理续期,且支持域名通配符,当域名到期后,可以自动完成域名续期并执行nginx加载操作使新域名生效,就不在需要特意关注域名过期时间,省了重新手动申请的麻烦。

安装acme.sh

首先在服务器上安装acme.sh,这个脚本会自动在域名过期后进行续期。

sudo apt install socat
curl https://get.acme.sh | sh -s email=<email> # <email> 替换为你的邮箱地址

安装完成后acme.sh命令会写入到.bashrc里,若提示没有acme.shsource一下.bashrc即可:

source .bashrc

申请域名证书

freessl网站上创建新的SSL证书,品牌选择亚洲诚信续期,域名填写example.com*.example.com(example.com替换为实际的域名),如下:

image-20220606114810074

点击创建按钮,或者直接在[ACME]自动化菜单中点击[添加]按钮,会弹出ACME域名配置弹窗,输入域名后,根据提示配置acme解析,如下:

image-20220606115349671

在域名解析中添加一条CNAME记录即可,添加完成后等待一会点击[配置完成,立即检测],检测成功后,会提示进行下一步部署,复制提示中的部署命令,点击部署完成即可。

服务器配置证书

首先在服务器上运行上步复制的部署命令,如下:

acme.sh --issue -d labrador.ink -d *.labrador.ink  --dns dns_dp --server <server>

然后配置证书,以nginx为例,将证书保存到nginx路径下(example.com 替换为实际的域名):

acme.sh --install-cert -d example.com \
> --key-file /etc/nginx/ssl/example.key \
> --fullchain-file /etc/nginx/ssl/example.pem \
> --reloadcmd "service nginx force-reload"

执行成功后,acme.sh会在域名到期后自动续期更新,并执行reload操作生效,然后在ngxin配置文件中直接配置即可:

listen 443 ssl;
listen [::]:443;

server_name example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/example.pem;
ssl_certificate_key /etc/nginx/ssl/example.key;

由于申请的是通配域名,所以可以直接配置多个二级域名,无需其它额外操作,如:

listen 443 ssl;
listen [::]:443;

server_name test.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/example.pem;
ssl_certificate_key /etc/nginx/ssl/example.key;