群晖emby套件同步系统的证书并转换
计划任务执行以下:
#!/bin/bash
set -e
SRC_BASE="/usr/syno/etc/certificate/_archive"
COPY_DEST="/volume3/data1/emby/fuzhi"
PFX_DEST="/volume3/data1/emby/zhuanhuan"
LOG="/var/log/copy_and_convert_nas_cert_to_emby.log"
PFX_PASS="修改为证书密码此处修改"
PFX_FILE="$PFX_DEST/emby.pfx"
TMP_PFX_FILE="$PFX_DEST/emby.pfx.tmp"
{
echo "===== $(date '+%F %T') 开始同步 NAS 默认证书并转换为 Emby PFX ====="
echo "当前执行用户: $(whoami)"
echo "源证书基础目录: $SRC_BASE"
echo "复制目标目录: $COPY_DEST"
echo "PFX输出目录: $PFX_DEST"
if [ "$PFX_PASS" = "这里改成你的PFX密码" ] || [ -z "$PFX_PASS" ]; then
echo "错误:请先修改脚本里的 PFX_PASS"
exit 1
fi
if [ ! -f "$SRC_BASE/DEFAULT" ]; then
echo "错误:找不到 DEFAULT 文件:$SRC_BASE/DEFAULT"
exit 1
fi
CERT_ID="$(cat "$SRC_BASE/DEFAULT")"
SRC="$SRC_BASE/$CERT_ID"
echo "当前默认证书ID: $CERT_ID"
echo "当前默认证书目录: $SRC"
if [ ! -d "$SRC" ]; then
echo "错误:源证书目录不存在:$SRC"
exit 1
fi
if [ ! -f "$SRC/cert.pem" ]; then
echo "错误:源目录缺少 cert.pem"
exit 1
fi
if [ ! -f "$SRC/privkey.pem" ]; then
echo "错误:源目录缺少 privkey.pem"
exit 1
fi
echo "创建目标目录..."
mkdir -p "$COPY_DEST"
mkdir -p "$PFX_DEST"
chmod 755 /volume3/data1/emby 2>/dev/null || true
chmod 755 "$COPY_DEST" 2>/dev/null || true
chmod 755 "$PFX_DEST" 2>/dev/null || true
echo "开始复制当前 NAS 默认证书..."
for f in cert.pem privkey.pem chain.pem fullchain.pem; do
if [ -f "$SRC/$f" ]; then
cp -f "$SRC/$f" "$COPY_DEST/$f"
echo "已复制:$f"
else
echo "警告:未找到:$SRC/$f"
fi
done
echo "$CERT_ID" > "$COPY_DEST/DEFAULT_ID.txt"
openssl x509 \
-in "$SRC/cert.pem" \
-noout \
-subject \
-issuer \
-dates \
-fingerprint \
-sha256 > "$COPY_DEST/cert_info.txt"
chmod 755 /volume3/data1/emby 2>/dev/null || true
chmod 755 "$COPY_DEST" 2>/dev/null || true
chmod 755 "$PFX_DEST" 2>/dev/null || true
chmod 600 "$COPY_DEST/privkey.pem" 2>/dev/null || true
chmod 644 "$COPY_DEST/cert.pem" "$COPY_DEST/fullchain.pem" "$COPY_DEST/chain.pem" "$COPY_DEST/DEFAULT_ID.txt" "$COPY_DEST/cert_info.txt" 2>/dev/null || true
echo "复制完成。"
echo "开始从复制目录转换 Emby PFX..."
if [ ! -f "$COPY_DEST/cert.pem" ]; then
echo "错误:复制目录缺少 cert.pem:$COPY_DEST/cert.pem"
exit 1
fi
if [ ! -f "$COPY_DEST/privkey.pem" ]; then
echo "错误:复制目录缺少 privkey.pem:$COPY_DEST/privkey.pem"
exit 1
fi
rm -f "$TMP_PFX_FILE"
if [ -f "$COPY_DEST/chain.pem" ]; then
echo "使用 cert.pem + privkey.pem + chain.pem 生成 emby.pfx"
openssl pkcs12 -export \
-out "$TMP_PFX_FILE" \
-inkey "$COPY_DEST/privkey.pem" \
-in "$COPY_DEST/cert.pem" \
-certfile "$COPY_DEST/chain.pem" \
-passout pass:"$PFX_PASS"
elif [ -f "$COPY_DEST/fullchain.pem" ]; then
echo "未找到 chain.pem,使用 fullchain.pem 生成 emby.pfx"
openssl pkcs12 -export \
-out "$TMP_PFX_FILE" \
-inkey "$COPY_DEST/privkey.pem" \
-in "$COPY_DEST/fullchain.pem" \
-passout pass:"$PFX_PASS"
else
echo "错误:复制目录缺少 chain.pem 或 fullchain.pem,无法生成完整 PFX"
exit 1
fi
if [ ! -s "$TMP_PFX_FILE" ]; then
echo "错误:临时 PFX 文件不存在或大小为 0"
exit 1
fi
echo "验证 PFX 文件..."
openssl pkcs12 \
-in "$TMP_PFX_FILE" \
-noout \
-passin pass:"$PFX_PASS"
mv -f "$TMP_PFX_FILE" "$PFX_FILE"
openssl x509 \
-in "$COPY_DEST/cert.pem" \
-noout \
-subject \
-issuer \
-dates \
-fingerprint \
-sha256 > "$PFX_DEST/emby_pfx_cert_info.txt"
cp -f "$COPY_DEST/DEFAULT_ID.txt" "$PFX_DEST/DEFAULT_ID.txt" 2>/dev/null || true
chmod 755 /volume3/data1/emby 2>/dev/null || true
chmod 755 "$COPY_DEST" 2>/dev/null || true
chmod 755 "$PFX_DEST" 2>/dev/null || true
chmod 644 "$PFX_FILE"
chmod 644 "$PFX_DEST/emby_pfx_cert_info.txt" "$PFX_DEST/DEFAULT_ID.txt" 2>/dev/null || true
echo "转换完成。"
echo "生成的 Emby PFX 文件:$PFX_FILE"
echo "复制目录内容:"
ls -la "$COPY_DEST"
echo "转换后目录内容:"
ls -la "$PFX_DEST"
echo "开始重启 EmbyServer 套件..."
if synopkg status EmbyServer >/dev/null 2>&1; then
synopkg restart EmbyServer
echo "EmbyServer 套件已重启"
else
echo "错误:未检测到 EmbyServer 套件,无法重启"
exit 1
fi
echo "===== $(date '+%F %T') 全部完成 ====="
echo ""
} >> "$LOG" 2>&1