当前位置: 首页 > news >正文

群晖Lucky套件高级玩法-——更新证书同步更新群晖自带证书

自动更新加申请证书的工具有很多,今天玩lucky

基础设置如下,忽略讲述

在这里插入图片描述
在这里插入图片描述

重点来了,打开证书映射,会告诉你在目录下生成三个证书

很多人会在这里遇到问题,基本上就两点原因,群晖lucky套件文件管理权限不够 和 无管理root权限,无法使用sudo命令
在这里插入图片描述

我的解决方法,仅供参考
问题①:设置domain文件夹编辑权限为everyone
问题②:lucky证书变化后创建文件,调用群晖自带计划任务(自带root),监测出文件后执行更新证书脚本。

详细:
①打开群晖file station,右键domain文件夹,属性—权限—新增—用户或组选择Everyone,选择所有权限,保存
在这里插入图片描述
勾选应用到这个文件夹,保存
在这里插入图片描述
在lucky脚本测试中使用

touch /domain/need_cert_update
echo "✅ 证书更新请求已发送,请等待执行..."

在这里插入图片描述
你会发现在/domain/文件夹下会有一个空白文件need_cert_update
接着在群晖任意文件夹下如/domain/新增一个名为Renew-R.sh的脚本(名字随便)

#!/bin/bash
if [ -f "/domain/need_cert_update" ]; thenrm -f /domain/need_cert_update/bin/bash /domain/renew.sh
fi

脚本解释:如果/domain/need_cert_update 存在,就删除need_cert_update文件且运行domain下的renew.sh脚本

再在/domain 下创建一个renew.sh
内容为

#!/bin/bash# 证书复制和替换脚本 - 用于自动复制Lucky生成的证书到群晖echo " 开始证书更新流程..."# 配置变量
# Lucky证书存放路径
SOURCE_DIR="/domain" 
# 证书名字
CERT_NAME="test.abc.com" 
# 群晖证书所在位置/usr/syno/etc/certificate/_archive,需要自己查看需要替换哪个文件夹里的内容
SYNO_CERT_DIR="/usr/syno/etc/certificate/_archive/CU8uAD"# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color# 日志函数
log_info() { echo -e "${BLUE}ℹ️  $1${NC}"; }
log_success() { echo -e "${GREEN}$1${NC}"; }
log_warning() { echo -e "${YELLOW}⚠️  $1${NC}"; }
log_error() { echo -e "${RED}$1${NC}"; }# 检查源文件是否存在
log_info "检查源证书文件..."
if [ ! -f "$SOURCE_DIR/$CERT_NAME.crt" ]; thenlog_error "CRT文件不存在: $SOURCE_DIR/$CERT_NAME.crt"exit 1
fiif [ ! -f "$SOURCE_DIR/$CERT_NAME.key" ]; thenlog_error "KEY文件不存在: $SOURCE_DIR/$CERT_NAME.key"exit 1
fiif [ ! -f "$SOURCE_DIR/$CERT_NAME.pem" ]; thenlog_error "PEM文件不存在: $SOURCE_DIR/$CERT_NAME.pem"exit 1
filog_success "所有源文件检查通过"# 分析证书文件内容
log_info "分析证书文件内容..."
CRT_CERTS=$(grep -c "BEGIN CERTIFICATE" "$SOURCE_DIR/$CERT_NAME.crt" 2>/dev/null || echo "0")
PEM_CERTS=$(grep -c "BEGIN CERTIFICATE" "$SOURCE_DIR/$CERT_NAME.pem" 2>/dev/null || echo "0")echo " CRT文件包含 $CRT_CERTS 个证书"
echo " PEM文件包含 $PEM_CERTS 个证书"# 智能判断证书映射策略
if [ "$CRT_CERTS" -ge 2 ] && [ "$PEM_CERTS" -ge 2 ]; thenlog_info "检测到两个文件都包含完整证书链,使用优化映射"# 两个文件都有完整链,选择证书数量更多的作为fullchainif [ "$PEM_CERTS" -ge "$CRT_CERTS" ]; thenCERT_FILE="$SOURCE_DIR/$CERT_NAME.crt"FULLCHAIN_FILE="$SOURCE_DIR/$CERT_NAME.pem"log_info "使用 PEM 文件作为 fullchain.pem ($PEM_CERTS 个证书)"elseCERT_FILE="$SOURCE_DIR/$CERT_NAME.pem"FULLCHAIN_FILE="$SOURCE_DIR/$CERT_NAME.crt"log_info "使用 CRT 文件作为 fullchain.pem ($CRT_CERTS 个证书)"fi
elif [ "$CRT_CERTS" -ge 2 ]; thenlog_info "CRT文件包含完整证书链"CERT_FILE="$SOURCE_DIR/$CERT_NAME.pem"FULLCHAIN_FILE="$SOURCE_DIR/$CERT_NAME.crt"
elif [ "$PEM_CERTS" -ge 2 ]; thenlog_info "PEM文件包含完整证书链"CERT_FILE="$SOURCE_DIR/$CERT_NAME.crt"FULLCHAIN_FILE="$SOURCE_DIR/$CERT_NAME.pem"
elselog_warning "未检测到完整证书链,使用默认映射"CERT_FILE="$SOURCE_DIR/$CERT_NAME.crt"FULLCHAIN_FILE="$SOURCE_DIR/$CERT_NAME.pem"
fi# 备份现有证书(如果存在)
if [ -f "$SYNO_CERT_DIR/cert.pem" ]; thenlog_info "备份现有群晖证书..."BACKUP_DIR="$SYNO_CERT_DIR/backup_$(date +%Y%m%d_%H%M%S)"sudo mkdir -p "$BACKUP_DIR"sudo cp "$SYNO_CERT_DIR"/*.pem "$BACKUP_DIR/" 2>/dev/null || truelog_success "备份完成: $BACKUP_DIR"
fi# 复制证书到群晖目录
log_info "复制证书到群晖目录..."
sudo cp "$CERT_FILE" "$SYNO_CERT_DIR/cert.pem"
sudo cp "$FULLCHAIN_FILE" "$SYNO_CERT_DIR/fullchain.pem"
sudo cp "$SOURCE_DIR/$CERT_NAME.key" "$SYNO_CERT_DIR/privkey.pem"# 设置正确的权限
log_info "设置文件权限..."
sudo chmod 644 "$SYNO_CERT_DIR/cert.pem"
sudo chmod 644 "$SYNO_CERT_DIR/fullchain.pem"
sudo chmod 600 "$SYNO_CERT_DIR/privkey.pem"log_success "证书复制完成!"# 验证复制结果
echo ""
log_info "验证复制结果..."
echo "=== 群晖证书目录 ==="
ls -la "$SYNO_CERT_DIR/" | grep -E "\.(pem|crt|key)$"# 验证证书内容
echo ""
log_info "验证证书链完整性..."
FINAL_FULLCHAIN_CERTS=$(grep -c "BEGIN CERTIFICATE" "$SYNO_CERT_DIR/fullchain.pem" 2>/dev/null || echo "0")
FINAL_CERT_CERTS=$(grep -c "BEGIN CERTIFICATE" "$SYNO_CERT_DIR/cert.pem" 2>/dev/null || echo "0")echo " 最终 fullchain.pem 包含: $FINAL_FULLCHAIN_CERTS 个证书"
echo " 最终 cert.pem 包含: $FINAL_CERT_CERTS 个证书"if [ "$FINAL_FULLCHAIN_CERTS" -ge 2 ]; thenlog_success "fullchain.pem 包含完整证书链"
elselog_warning "fullchain.pem 可能不包含完整证书链"
fi# 验证证书有效性
log_info "验证证书有效性..."
if openssl x509 -in "$SYNO_CERT_DIR/cert.pem" -noout -text >/dev/null 2>&1; thenCERT_SUBJECT=$(openssl x509 -in "$SYNO_CERT_DIR/cert.pem" -noout -subject | sed 's/subject=//')CERT_DATES=$(openssl x509 -in "$SYNO_CERT_DIR/cert.pem" -noout -dates)log_success "证书有效"echo " 证书主题: $CERT_SUBJECT"echo " $CERT_DATES"
elselog_error "证书格式无效"
fi# 检查私钥匹配
log_info "验证私钥匹配..."
CERT_MODULUS=$(openssl x509 -in "$SYNO_CERT_DIR/cert.pem" -noout -modulus 2>/dev/null | openssl md5)
KEY_MODULUS=$(openssl rsa -in "$SYNO_CERT_DIR/privkey.pem" -noout -modulus 2>/dev/null | openssl md5)if [ "$CERT_MODULUS" = "$KEY_MODULUS" ]; thenlog_success "私钥与证书匹配"
elselog_warning "私钥与证书可能不匹配"
fiecho ""
log_success " 证书更新完成!开始重启服务..."# 重启服务
echo ""
log_info "重启Nginx服务..."
if sudo systemctl restart nginx >/dev/null 2>&1; thenlog_success "Nginx服务重启成功"
elselog_warning "Nginx服务重启失败,请手动检查"
fi# 等待服务启动
log_info "等待服务启动..."
sleep 3# 检查服务状态
echo ""
log_info "检查服务状态..."# 检查Nginx状态
if sudo systemctl is-active nginx >/dev/null 2>&1; thenlog_success "Nginx服务运行正常"
elselog_warning "Nginx服务状态异常"
fiecho ""
log_success " 证书更新和服务重启流程完成!"
echo ""
echo " 验证建议:"
echo "1. 访问 https://test.abc.com 检查证书是否生效"
echo "2. 查看群晖管理界面证书状态"
echo ""
echo " 日志位置:"
echo "   Nginx日志: /var/log/nginx/"
echo ""
echo " 如有问题,可手动执行:"
echo "   sudo systemctl restart nginx"

包括如果有其他地方需要替换证书,也可以自己修改脚本(AI很强大)建议手动ssh里运行一下这个脚本,无误后再进行操作

群晖控制面板-任务计划-新增-计划的任务-用户自定的脚本在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


文章转载自:

http://tb7w26rS.wjLnz.cn
http://arM828fG.wjLnz.cn
http://0ilEhUdY.wjLnz.cn
http://NyxumxUu.wjLnz.cn
http://oTBE97GF.wjLnz.cn
http://n0rK4t8D.wjLnz.cn
http://625dCTEP.wjLnz.cn
http://i5OLFIL4.wjLnz.cn
http://bfqH9z1U.wjLnz.cn
http://GHIlXLPx.wjLnz.cn
http://J5XaBmAs.wjLnz.cn
http://1TCsR7NQ.wjLnz.cn
http://CLDRxqfd.wjLnz.cn
http://T6MJ2r9L.wjLnz.cn
http://Djjf5ZYL.wjLnz.cn
http://vsoulr7V.wjLnz.cn
http://ZQZMClx3.wjLnz.cn
http://mgWdXQoW.wjLnz.cn
http://QhcKVSlJ.wjLnz.cn
http://IoE9AyqJ.wjLnz.cn
http://U5DiokkU.wjLnz.cn
http://8P4LnqZc.wjLnz.cn
http://qUQYjsZh.wjLnz.cn
http://Bm0C03No.wjLnz.cn
http://UZ6txnZP.wjLnz.cn
http://OARF6yTw.wjLnz.cn
http://G4dzGVuX.wjLnz.cn
http://X3GBAhMg.wjLnz.cn
http://0VxrIXq3.wjLnz.cn
http://j8kH8dvi.wjLnz.cn
http://www.dtcms.com/a/375835.html

相关文章:

  • 照明控制设备工程量计算 -图形识别超方便
  • Matlab通过FFT快速傅里叶变换提取频率
  • iis 高可用
  • 有趣的数学 贝塞尔曲线和毕加索
  • 基于STM32的智能宠物小屋设计
  • STM32之RS485与ModBus详解
  • DCDC输出
  • GitHub 项目提交完整流程(含常见问题与解决办法)
  • Day39 SQLite数据库操作与文本数据导入
  • python常用命令
  • 广东省省考备考(第九十五天9.9)——言语、资料分析、判断推理(强化训练)
  • MySQL问题8
  • 【AI】Jupyterlab中关于TensorFlow版本问题
  • Java 运行时异常与编译时异常以及异常是否会对数据库造成影响?
  • CosyVoice2简介
  • 新机快速搭建java开发环境过程记录
  • std::enable_shared_from_this
  • Spring Boot--Bean的扫描和注册
  • Pytorch基础入门3
  • ARM-指令集全解析:从基础到高阶应用
  • ARM 汇编学习
  • 今天继续昨天的正则表达式进行学习
  • Mysql集群——MHA高可用架构
  • 【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原机安卓4升级安卓7/安卓9-通刷包
  • SYSTEM 提权面板:提升文件运行权限的高效工具
  • 【Python】S1 基础篇 P6 用户交互与循环控制:构建动态交互程序
  • Java 数据类型详解
  • java常见SSL bug解决方案
  • JAVA stream().flatMap()
  • 【C++】string类 - 库中的常见使用