飞牛OS自动更新SSL证书方案
背景
手上有台飞牛OS(fnOS)NAS,绑定了域名 f.h89.cn,HTTPS证书需要定期续期。手动更新太麻烦,写个脚本自动化处理。
环境说明
- 系统:飞牛OS(本质是Linux,但服务管理有自己的套路)
- 域名:
f.h89.cn,DNS托管在阿里云 - 证书工具:acme.sh
- 涉及服务:
- 飞牛OS自带Nginx(5667端口)
- Docker容器:nginx、vaultwarden、gitea
证书存放位置
飞牛OS的证书放在这个目录:
/usr/trim/var/trim_connect/ssls/f.h89.cn/1766413711/
├── f.h89.cn.crt
└── f.h89.cn.key
Nginx配置里有个 trim_cert_cfg_path 指向 /usr/trim/etc/network_gateway_cert.conf,这个json文件记录了证书路径映射关系。所以只要把新证书替换到对应目录,再重启服务就行。
踩坑点:直接 nginx -s reload 没用,证书是由 network_service 管理的,得重启这个服务。
完整脚本
#!/bin/bash
export Ali_Key="你的AccessKey"
export Ali_Secret="你的Secret"
ACME_DIR=/vol1/1000/Tools/acme
LOG_PATH=$ACME_DIR/$(date '+%Y%m%d_%H%M%S').log
CERT_DEST="/usr/trim/var/trim_connect/ssls/f.h89.cn/1766413711"
cd ${ACME_DIR}/acme.sh
# 申请证书
./acme.sh --issue --dns dns_ali -d f.h89.cn --server letsencrypt >> $LOG_PATH
# 备份
cp -rfv ~/.acme.sh/f.h89.cn ${ACME_DIR} >> $LOG_PATH
# 替换证书
sudo cp -fv ~/.acme.sh/f.h89.cn/f.h89.cn.cer ${CERT_DEST}/f.h89.cn.crt >> $LOG_PATH
sudo cp -fv ~/.acme.sh/f.h89.cn/f.h89.cn.key ${CERT_DEST}/f.h89.cn.key >> $LOG_PATH
# 重启飞牛OS服务
sudo systemctl restart network_service >> $LOG_PATH 2>&1
sudo systemctl restart trim_nginx >> $LOG_PATH 2>&1
# 重启Docker容器
docker restart docker-nginx vaultwarden-server gitea >> $LOG_PATH 2>&1
sudo免密配置
脚本里用了sudo,需要先配置免密,否则执行时会卡在密码输入:
echo 'chenjim ALL=(ALL) NOPASSWD: /usr/bin/cp, /usr/trim/nginx/sbin/nginx, /usr/bin/systemctl' | sudo tee /etc/sudoers.d/chenjim-acme
sudo chmod 440 /etc/sudoers.d/chenjim-acme
定时任务
crontab -e
添加每月1号凌晨3点执行:
0 3 1 * * /vol1/1000/Tools/acme/start.sh
验证
手动跑一次,检查证书有效期:
echo | openssl s_client -connect 127.0.0.1:5667 -servername f.h89.cn 2>/dev/null | openssl x509 -noout -dates
输出应该是新证书的日期。
本文链接:飞牛OS自动更新SSL证书方案 - https://h89.cn/archives/532.html
版权声明:原创文章 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文链接和本声明。