## 准备工作 - DSM v7.3.1 - Emby Server v4.9.1 - Acme.sh v3.1.2([群晖NAS配合acme.sh自动更新SSL证书](https://www.simaek.com/archives/405/)) ## 更新脚本 以下脚本可以将 PEM 证书转换成 PKCS#12 格式,并且重启 Emby Server 服务。 ``` #!/bin/bash #================================================================ # Script to deploy acme.sh certificate to Emby on Synology DSM # Version 2.0 - Now supports both RSA and ECC certificates automatically #================================================================ ## CONFIGURATION - 请根据你的实际情况修改以下变量 ## #================================================================ # 1. 你的 Emby 域名 (必须与 acme.sh 申请的域名一致) DOMAIN="emby.example.com" # 2. PFX 证书的密码 (Emby 将使用此密码读取证书) # 建议设置一个密码。如果留空 (""),则 PFX 文件无密码。 PFX_PASSWORD="" # 3. Emby 服务器存放证书的目录路径 # 在大多数群晖套件中,路径是固定的。请确认此路径是否正确。 EMBY_CONFIG_DIR="/var/packages/EmbyServer/var/config" # 4. Emby 服务运行的用户和组 (用于设置文件权限) # 通常是 sc-emby:emby。你可以通过 `ps | grep Emby` 查看运行用户。 EMBY_USER="emby" EMBY_GROUP="emby" # 5. acme.sh 的主目录 ACME_HOME="/var/services/homes/xueye/.acme.sh" ## END OF CONFIGURATION ## #================================================================ # 定义日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] - $1" } log "开始为 Emby 部署证书..." # --- 关键更新:自动检测证书目录 (支持 RSA 和 ECC) --- CERT_DIR="" ECC_CERT_DIR="$ACME_HOME/${DOMAIN}_ecc" RSA_CERT_DIR="$ACME_HOME/$DOMAIN" if [ -d "$ECC_CERT_DIR" ]; then log "检测到 ECC 证书目录。" CERT_DIR="$ECC_CERT_DIR" elif [ -d "$RSA_CERT_DIR" ]; then log "检测到 RSA 证书目录。" CERT_DIR="$RSA_CERT_DIR" else log "错误: 找不到证书目录。已检查 '$ECC_CERT_DIR' 和 '$RSA_CERT_DIR'。" exit 1 fi log "使用的证书目录是: $CERT_DIR" # 检查域名证书文件是否存在 if [ ! -f "$CERT_DIR/$DOMAIN.key" ] || [ ! -f "$CERT_DIR/fullchain.cer" ]; then log "错误: 在 $CERT_DIR 中找不到证书文件。请检查域名是否正确。" exit 1 fi # 检查 Emby 配置目录是否存在 if [ ! -d "$EMBY_CONFIG_DIR" ]; then log "错误: Emby 配置目录 $EMBY_CONFIG_DIR 不存在。" exit 1 fi # 定义 PFX 文件路径 PFX_TARGET_PATH="$EMBY_CONFIG_DIR/certificate.pfx" TEMP_PFX_PATH="/tmp/$DOMAIN.pfx" # 使用 openssl 生成 PFX 文件 log "正在从最新的 key 和 fullchain 文件生成 PFX 证书..." # 根据是否有密码选择不同的参数 if [ -n "$PFX_PASSWORD" ]; then PASS_PARAM="-password pass:$PFX_PASSWORD" else PASS_PARAM="-password pass:" fi openssl pkcs12 -export \ -out "$TEMP_PFX_PATH" \ -inkey "$CERT_DIR/$DOMAIN.key" \ -in "$CERT_DIR/fullchain.cer" \ $PASS_PARAM # 检查 PFX 文件是否成功生成 if [ $? -ne 0 ]; then log "错误: 生成 PFX 文件失败。" rm -f "$TEMP_PFX_PATH" # 清理失败的临时文件 exit 1 fi log "PFX 文件已成功生成到 $TEMP_PFX_PATH" # 部署 PFX 文件到 Emby 目录 log "正在将 PFX 文件复制到 $PFX_TARGET_PATH" cp "$TEMP_PFX_PATH" "$PFX_TARGET_PATH" # 设置正确的文件所有者和权限 log "正在为 $PFX_TARGET_PATH 设置权限..." chown $EMBY_USER:$EMBY_GROUP "$PFX_TARGET_PATH" chmod 600 "$PFX_TARGET_PATH" # 清理临时文件 rm -f "$TEMP_PFX_PATH" # 重启 Emby Server 以加载新证书 log "正在重启 Emby Server 服务..." synosystemctl restart pkgctl-EmbyServer.service if [ $? -eq 0 ]; then log "Emby Server 重启成功。新证书已部署!" else log "警告: Emby Server 重启命令可能失败。请检查服务状态。" fi exit 0 ``` ### 添加 acme.sh 钩子 在 Acme.sh 更新证书后,执行此脚本。 ``` acme.sh --install-cert -d emby.example.com \ --reloadcmd "sudo /volume1/homes/xueye/scripts/emby_deploy.sh" ``` Loading... ## 准备工作 - DSM v7.3.1 - Emby Server v4.9.1 - Acme.sh v3.1.2([群晖NAS配合acme.sh自动更新SSL证书](https://www.simaek.com/archives/405/)) ## 更新脚本 以下脚本可以将 PEM 证书转换成 PKCS#12 格式,并且重启 Emby Server 服务。 ``` #!/bin/bash #================================================================ # Script to deploy acme.sh certificate to Emby on Synology DSM # Version 2.0 - Now supports both RSA and ECC certificates automatically #================================================================ ## CONFIGURATION - 请根据你的实际情况修改以下变量 ## #================================================================ # 1. 你的 Emby 域名 (必须与 acme.sh 申请的域名一致) DOMAIN="emby.example.com" # 2. PFX 证书的密码 (Emby 将使用此密码读取证书) # 建议设置一个密码。如果留空 (""),则 PFX 文件无密码。 PFX_PASSWORD="" # 3. Emby 服务器存放证书的目录路径 # 在大多数群晖套件中,路径是固定的。请确认此路径是否正确。 EMBY_CONFIG_DIR="/var/packages/EmbyServer/var/config" # 4. Emby 服务运行的用户和组 (用于设置文件权限) # 通常是 sc-emby:emby。你可以通过 `ps | grep Emby` 查看运行用户。 EMBY_USER="emby" EMBY_GROUP="emby" # 5. acme.sh 的主目录 ACME_HOME="/var/services/homes/xueye/.acme.sh" ## END OF CONFIGURATION ## #================================================================ # 定义日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] - $1" } log "开始为 Emby 部署证书..." # --- 关键更新:自动检测证书目录 (支持 RSA 和 ECC) --- CERT_DIR="" ECC_CERT_DIR="$ACME_HOME/${DOMAIN}_ecc" RSA_CERT_DIR="$ACME_HOME/$DOMAIN" if [ -d "$ECC_CERT_DIR" ]; then log "检测到 ECC 证书目录。" CERT_DIR="$ECC_CERT_DIR" elif [ -d "$RSA_CERT_DIR" ]; then log "检测到 RSA 证书目录。" CERT_DIR="$RSA_CERT_DIR" else log "错误: 找不到证书目录。已检查 '$ECC_CERT_DIR' 和 '$RSA_CERT_DIR'。" exit 1 fi log "使用的证书目录是: $CERT_DIR" # 检查域名证书文件是否存在 if [ ! -f "$CERT_DIR/$DOMAIN.key" ] || [ ! -f "$CERT_DIR/fullchain.cer" ]; then log "错误: 在 $CERT_DIR 中找不到证书文件。请检查域名是否正确。" exit 1 fi # 检查 Emby 配置目录是否存在 if [ ! -d "$EMBY_CONFIG_DIR" ]; then log "错误: Emby 配置目录 $EMBY_CONFIG_DIR 不存在。" exit 1 fi # 定义 PFX 文件路径 PFX_TARGET_PATH="$EMBY_CONFIG_DIR/certificate.pfx" TEMP_PFX_PATH="/tmp/$DOMAIN.pfx" # 使用 openssl 生成 PFX 文件 log "正在从最新的 key 和 fullchain 文件生成 PFX 证书..." # 根据是否有密码选择不同的参数 if [ -n "$PFX_PASSWORD" ]; then PASS_PARAM="-password pass:$PFX_PASSWORD" else PASS_PARAM="-password pass:" fi openssl pkcs12 -export \ -out "$TEMP_PFX_PATH" \ -inkey "$CERT_DIR/$DOMAIN.key" \ -in "$CERT_DIR/fullchain.cer" \ $PASS_PARAM # 检查 PFX 文件是否成功生成 if [ $? -ne 0 ]; then log "错误: 生成 PFX 文件失败。" rm -f "$TEMP_PFX_PATH" # 清理失败的临时文件 exit 1 fi log "PFX 文件已成功生成到 $TEMP_PFX_PATH" # 部署 PFX 文件到 Emby 目录 log "正在将 PFX 文件复制到 $PFX_TARGET_PATH" cp "$TEMP_PFX_PATH" "$PFX_TARGET_PATH" # 设置正确的文件所有者和权限 log "正在为 $PFX_TARGET_PATH 设置权限..." chown $EMBY_USER:$EMBY_GROUP "$PFX_TARGET_PATH" chmod 600 "$PFX_TARGET_PATH" # 清理临时文件 rm -f "$TEMP_PFX_PATH" # 重启 Emby Server 以加载新证书 log "正在重启 Emby Server 服务..." synosystemctl restart pkgctl-EmbyServer.service if [ $? -eq 0 ]; then log "Emby Server 重启成功。新证书已部署!" else log "警告: Emby Server 重启命令可能失败。请检查服务状态。" fi exit 0 ``` ### 添加 acme.sh 钩子 在 Acme.sh 更新证书后,执行此脚本。 ``` acme.sh --install-cert -d emby.example.com \ --reloadcmd "sudo /volume1/homes/xueye/scripts/emby_deploy.sh" ``` 最后修改:2025 年 11 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏