威联通自定义任务续期证书

发布于 2024-04-06  61 次阅读


前言

QNAP 的 NAS 一直没接入云服务,所有业务都是通过 WireGuard 通道连接进行,虽然有加密了,但是最近想把 BitWarden 也搬到 NAS 上来,出现了一个小问题,需要 https 连接。。。

我所有的业务基本都是在 docker 上实现的,想着用个外部域名添个内部 ip 地址,docker 这边就用 nginx 反代吧!QNAP 这边云的证书(Let's Encrypt)也顺手弄了,给需要的人吧~

证书更新脚本

证书更新同样也是通过 docker certbot/dns-cloudflare 实现的,剩下的就是定时更新这个证书了。

#!/bin/bash
#export PATH=$PATH

LOG_FILE="/share/Container/dockerdata/myCrontab/renew_cert.log"
# docker 程序不在默认路径下,需要手动指定,否则可能导致运行系统运行脚本时找不到文件
DOCKER_BIN="/share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker"

log() {
	if [ "$1" ]; then
		echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] - $1" >> $LOG_FILE
	fi
}

# echo $(TZ=UTC-8 date "+%Y-%m-%d %H:%M:%S.%3N") 开始续期证书...
log "开始续期证书..."
# Renew Certificate with DNS
$DOCKER_BIN run -i --rm --name certbot \
-v /share/Container/dockerdata/certbot/letsencrypt:/etc/letsencrypt \
-v /share/Container/dockerdata/certbot/config/cloudflare.ini:/.secrets/cloudflare.ini \
certbot/dns-cloudflare:latest -q renew
log "证书续期完成!"

log "开始重载 nginx..."
$DOCKER_BIN exec nginx \
  nginx -s reload 
log "重载 nginx 完成!"

# 以下就是把证书复制到 QNAP 下面了(可以在 控制台 -> 系统 -> 安全 -> SSL 证书和私钥 下看到相关证书情况)
log "开始合并证书到相关目录..."
# copy cert to /etc/stunnel/
cat /share/Container/dockerdata/certbot/letsencrypt/live/你的域名/fullchain.pem > /etc/stunnel/backup.cert
cat /share/Container/dockerdata/certbot/letsencrypt/live/你的域名/privkey.pem > /etc/stunnel/backup.key
cat /etc/stunnel/backup.cert /etc/stunnel/backup.key > /etc/stunnel/stunnel.pem

# 还原成默认证书
# cp /etc/stunnel/backup.cert.def /etc/stunnel/backup.cert
# cp /etc/stunnel/backup.key.def /etc/stunnel/backup.key
# cp /etc/stunnel/stunnel.pem.temp /etc/stunnel/stunnel.pem
log "合并到相关目录完成!"

log "重启 QNAP 相关服务"
/etc/init.d/Qthttpd.sh restart
/etc/init.d/thttpd.sh restart
/etc/init.d/stunnel.sh restart
log "重启相关服务完成"

log "所有任务均已结束!"

脚本运行后,在控制台中可以看到授权证书已经变了:

定时任务

接下来就是定时任务了,QNAP 对于一般定时任务,crontab -e 是临时保存,意味着重启后会丢失配置。从保存路径来看,它是保存在 tmp 下的:

要实现重启不丢失,可以编辑 /etc/config/crontab 中的配置文件:

vi /etc/config/crontab

可以设置每 7 天凌晨 3 点运行一次证书续期:

0 3 */7 * * bash /share/Container/dockerdata/myCrontab/renew_cert.sh

感谢

https://www.qnap.com/en/how-to/faq/article/how-to-replace-ssl-certificate-manually-on-ssh-console

https://wiki.qnap.com/wiki/Add_items_to_crontab