fnOS配置SSL证书及简单实现自动续签

fnOS配置SSL证书(HTTPS访问)及1Panel自动续签教程

本文将实现 fnOS配置SSL证书以支持HTTPS访问,并通过 1Panel 实现证书的自动续签功能。

一、fnOS新建证书存储文件夹

  1. 点击【文件管理】,在目标磁盘中创建用于存储证书的文件夹(示例:在【存储空间2】中创建 certs 文件夹)。
  2. 效果图:
    img
  3. 文件夹创建完成后备用,后续步骤会调用该目录存储证书文件。

二、安装1Panel

通过1Panel实现证书申请及自动续签功能,安装步骤如下:

  1. 进入fnOS【应用中心】,选择【1Panel】,点击【安装】。
    img
  2. 等待下载完成后,根据实际需求配置基础参数。
    img
  3. 关键提醒:务必记住设置的【安全入口名】【用户名/密码】(示例:安全入口设为 safe)。
    img
  4. 点击【确定】完成安装。
    img

三、1Panel配置与登录

  1. 安装完成后,点击【打开Panel】。
    img
  2. 因开启安全入口,直接访问会失败。
    img
  3. 在浏览器地址后拼接安全入口路径访问(示例:http://192.168.2.3:18090/safe)。
    img
  4. 输入设置的用户名和密码,完成登录。

四、检查目录权限

  1. 登录1Panel后,选择【主机】-【终端】。
    img
  2. 首次连接需手动配置终端:主机地址默认即可;
  3. 用户名/密码填写 fnOS的账号信息(非1Panel账号)。
  4. 点击右下角【连接测试】,测试通过后点击【保存并连接】。
    img
  5. 终端显示登录成功即完成连接。
    img
  6. 返回fnOS,右键第一步创建的 certs 文件夹,选择【详细信息】。
    img
  7. 点击【复制原始路径】,获取文件夹绝对路径。
    img
  8. 回到1Panel终端,输入命令切换到证书目录(将路径替换为复制的内容):
    cd /vol2/1000/certs

img

  1. 创建测试文件验证权限,输入命令后无报错即权限正常:
    touch 12

img

五、SSL证书申请

进入1Panel【网站】-【证书】页面,按以下步骤完成申请:

img

(1)添加Acme账户

  1. 点击【Acme账户】。
    img
  2. 点击【创建】,输入邮箱地址后确认提交。
    img

img

(2)添加DNS账户

  1. 点击【DNS账户】。
    img
  2. 点击【创建】,选择自己的域名服务商,填写对应的ID和Key(以阿里云为例,ID/Key获取方式可百度查询)。
    img

(3)申请证书

  1. 点击【申请证书】。
    img
  2. 输入需要申请证书的域名。
    img
  3. 勾选【推送证书到本地目录】,选择之前创建的 certs 文件夹。
    img
  4. 勾选【申请证书之后执行脚本】,输入以下脚本(将 xxx.com 替换为自己的域名):
    `#!/bin/bash

mv fullchain.pem xxx.com.crt
mv privkey.pem xxx.com.key`
脚本作用:将生成的证书文件重命名,便于识别和后续使用。
img

  1. 点击【确定】,等待证书申请完成。
    img
  2. 关闭窗口并刷新页面,证书状态显示正常即申请成功。
    img
  3. 返回fnOS的 certs 文件夹,可看到已生成的证书文件。
    img

六、fnOS配置SSL证书

  1. 下载 certs 文件夹中生成的两个证书文件(.crt 和 .key)。
  2. 进入fnOS【系统设置】-【安全性】-【证书】,点击【新增证书】。
    img
  3. 输入证书描述,上传下载的两个证书文件。
    img
  4. 添加完成后,证书列表显示“有效”即配置成功。
    img
  5. 访问测试:因未开启80/443强制跳转和强制HTTPS,需使用完整地址访问(格式:https://域名:端口号),能正常访问即说明SSL生效。
    img

七、自动续签SSL并更新证书

1Panel已默认开启证书自动续签,无需额外配置续签触发;需修改脚本实现续签后自动同步证书到fnOS并更新服务。

(1)获取fnOS证书存储路径

  1. 进入1Panel终端,输入以下命令查看证书路径配置文件:
    cat /usr/trim/etc/network_cert_all.conf

img

  1. 复制输出结果中 .crt 文件的前一级目录路径(示例:/usr/trim/var/trim_connect/ssls/xxx.com/1740193347)。

(2)修改证书申请后执行脚本

  1. 回到1Panel【网站】-【证书】页面,选择已申请的证书,点击【编辑】。
    img
  2. 将【申请证书之后执行脚本】替换为以下内容,需完整配置 CERT_NAMEPANEL_CERT_PATHFNOS_CERT_PATH 三个字段:
#!/bin/bash
set -e

CERT_NAME="你的域名"
PANEL_CERT_PATH="你的证书地址(certs文件夹绝对路径)"
FNOS_CERT_PATH="/usr/trim/var/trim_connect/ssls/你的域名/你的编码"

if [[ -f "$PANEL_CERT_PATH/fullchain.pem" && -f "$PANEL_CERT_PATH/privkey.pem" ]]; then
  mv "$PANEL_CERT_PATH/fullchain.pem" "$PANEL_CERT_PATH/$CERT_NAME.crt"
  mv "$PANEL_CERT_PATH/privkey.pem" "$PANEL_CERT_PATH/$CERT_NAME.key"
else
  echo "错误:证书文件 fullchain.pem 或 privkey.pem 不存在!"
  exit 1
fi

mkdir -p "$FNOS_CERT_PATH"

cp "$PANEL_CERT_PATH/$CERT_NAME."{crt,key} "$FNOS_CERT_PATH/" -av

chmod 644 "$FNOS_CERT_PATH/$CERT_NAME.crt"
chmod 600 "$FNOS_CERT_PATH/$CERT_NAME.key"

NEW_EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$FNOS_CERT_PATH/$CERT_NAME.crt" | cut -d= -f2)
NEW_EXPIRY_TIMESTAMP=$(date -d "$NEW_EXPIRY_DATE" +%s%3N)

export PGPASSWORD='your_password'
psql -U postgres -d trim_connect <<EOF
UPDATE cert SET valid_to=$NEW_EXPIRY_TIMESTAMP WHERE domain='$CERT_NAME';
EOF

services=(webdav.service smbftpd.service trim_nginx.service)
for service in "${services[@]}"; do
  if systemctl is-active --quiet "$service"; then
    systemctl restart "$service"
    echo "已重启服务: $service"
  else
    echo "警告:服务 $service 未运行,跳过重启"
  fi
done

echo "证书部署完成!"

结语

本方案理论可行,作者已完成基础配置,最终自动更新效果需等待周期触发后验证。配置过程中已检查权限相关问题,若存在谬误,欢迎各位大佬指出,不胜感激!

(注:文档部分内容可能由 AI 生成)

tag(s): none
show comments · back · home
Edit with markdown