1. 开启 ssh 功能

2. 使用 SSH 连接到飞牛 NAS
ssh 飞牛用户名@飞牛IP
密码为飞牛用户名对应的密码
3. 安装 certbot 和需要的插件
sudo apt install certbot python3-certbot python3-certbot-dns-cloudflare
4. 导入自动替换证书的 post-hook 脚本
sudo vim /etc/letsencrypt/renewal/域名.post.sh
写入以下内容
echo "证书已更新,开始替换系统证书 ..."
echo "备份原文件 ..."
mv /usr/trim/var/trim_connect/ssls/域名/随机数/域名.crt /usr/trim/var/trim_connect/ssls/域名/随机数/域名.crt-
mv /usr/trim/var/trim_connect/ssls/域名/随机数/域名.key /usr/trim/var/trim_connect/ssls/域名/随机数/域名.key-
mv /usr/trim/var/trim_connect/ssls/域名/随机数/fullchain.crt /usr/trim/var/trim_connect/ssls/域名/随机数/fullchain.crt-
echo "替换证书 ..."
cp /etc/letsencrypt/live/fn.rebeta.cn/cert.pem /usr/trim/var/trim_connect/ssls/域名/随机数/域名.crt
cp /etc/letsencrypt/live/fn.rebeta.cn/privkey.pem /usr/trim/var/trim_connect/ssls/域名/随机数/域名.key
cp /etc/letsencrypt/live/fn.rebeta.cn/fullchain.pem /usr/trim/var/trim_connect/ssls/域名/随机数/fullchain.crt
echo "修改证书权限 ..."
chmod 755 /usr/trim/var/trim_connect/ssls/域名/随机数/域名.crt
chmod 755 /usr/trim/var/trim_connect/ssls/域名/随机数/域名.key
chmod 755 /usr/trim/var/trim_connect/ssls/域名/随机数/fullchain.crt
# 获取新证书的到期日期并更新数据库中的证书有效期
NEW_EXPIRY_DATE=$(openssl x509 -enddate -noout -in "/usr/trim/var/trim_connect/ssls/域名/随机数/域名.crt" | sed "s/^.*=\(.*\)$/\1/")
NEW_EXPIRY_TIMESTAMP=$(date -d "$NEW_EXPIRY_DATE" +%s%3N) # 获取毫秒级时间戳
echo "新证书的有效期到: $NEW_EXPIRY_DATE"
# 更新数据库中的证书有效期
echo "更新数据库中的证书有效期 ..."
psql -U postgres -d trim_connect -c "UPDATE cert SET valid_to=$NEW_EXPIRY_TIMESTAMP WHERE domain='fn.rebeta.cn'"
# 重启服务
echo "正在重启相关服务 ..."
systemctl restart webdav.service
systemctl restart smbftpd.service
systemctl restart trim_nginx.service
echo "服务重启完成!"
5. 使用 certbot 自动申请证书并配置自动续期
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /cloudflare配置文件路径/cloudflare.ini \
--post-hook /etc/letsencrypt/renewal/域名.post.sh \
-d 域名
5. 下载证书
生成的证书位于 /etc/letsencrypt/live/域名 ,使用 ftp 工具或 scp 命令下载证书
6. 在飞牛中添加证书

7. 在终端获取证书存放位置。
cat /usr/trim/etc/network_cert_all.conf
certificate 字段中 /usr/trim/var/trim_connect/ssls/域名/随机数/域名.crt 这串路径中的 /usr/trim/var/trim_connect/ssls/域名/随机数/ 就是证书存放位置。
8. 修改自动更新证书脚本
sudo vim /etc/letsencrypt/renewal/域名.post.sh
将其中的证书路径替换为步骤 7 中获取的证书存放路径。
8. 测试是否可以自动更新证书
sudo certbot renew --force-renewal
执行完毕后刷新浏览器,查看证书的到期时间是否有变化。
参考内容:
证书自动更新脚本参考了以下脚本 https://github.com/lfgyx/fnos_certificate_update/blob/main/src/update_cert.sh
在终端获取证书存放位置参考了以下文章 https://zhuanlan.zhihu.com/p/1914312979106756527