fnOS配置SSL证书(HTTPS访问)及1Panel自动续签教程
本文将实现 fnOS配置SSL证书以支持HTTPS访问,并通过 1Panel 实现证书的自动续签功能。
一、fnOS新建证书存储文件夹
- 点击【文件管理】,在目标磁盘中创建用于存储证书的文件夹(示例:在【存储空间2】中创建
certs文件夹)。 - 效果图:

- 文件夹创建完成后备用,后续步骤会调用该目录存储证书文件。
二、安装1Panel
通过1Panel实现证书申请及自动续签功能,安装步骤如下:
- 进入fnOS【应用中心】,选择【1Panel】,点击【安装】。

- 等待下载完成后,根据实际需求配置基础参数。

- 关键提醒:务必记住设置的【安全入口名】【用户名/密码】(示例:安全入口设为
safe)。

- 点击【确定】完成安装。

三、1Panel配置与登录
- 安装完成后,点击【打开Panel】。

- 因开启安全入口,直接访问会失败。

- 在浏览器地址后拼接安全入口路径访问(示例:
http://192.168.2.3:18090/safe)。

- 输入设置的用户名和密码,完成登录。
四、检查目录权限
- 登录1Panel后,选择【主机】-【终端】。

- 首次连接需手动配置终端:主机地址默认即可;
- 用户名/密码填写 fnOS的账号信息(非1Panel账号)。
- 点击右下角【连接测试】,测试通过后点击【保存并连接】。

- 终端显示登录成功即完成连接。

- 返回fnOS,右键第一步创建的
certs文件夹,选择【详细信息】。

- 点击【复制原始路径】,获取文件夹绝对路径。

- 回到1Panel终端,输入命令切换到证书目录(将路径替换为复制的内容):
cd /vol2/1000/certs

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

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

(1)添加Acme账户
- 点击【Acme账户】。

- 点击【创建】,输入邮箱地址后确认提交。


(2)添加DNS账户
- 点击【DNS账户】。

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

(3)申请证书
- 点击【申请证书】。

- 输入需要申请证书的域名。

- 勾选【推送证书到本地目录】,选择之前创建的
certs文件夹。

- 勾选【申请证书之后执行脚本】,输入以下脚本(将
xxx.com替换为自己的域名):
`#!/bin/bash
mv fullchain.pem xxx.com.crt
mv privkey.pem xxx.com.key`
脚本作用:将生成的证书文件重命名,便于识别和后续使用。

- 点击【确定】,等待证书申请完成。

- 关闭窗口并刷新页面,证书状态显示正常即申请成功。

- 返回fnOS的
certs文件夹,可看到已生成的证书文件。

六、fnOS配置SSL证书
- 下载
certs文件夹中生成的两个证书文件(.crt 和 .key)。 - 进入fnOS【系统设置】-【安全性】-【证书】,点击【新增证书】。

- 输入证书描述,上传下载的两个证书文件。

- 添加完成后,证书列表显示“有效”即配置成功。

- 访问测试:因未开启80/443强制跳转和强制HTTPS,需使用完整地址访问(格式:
https://域名:端口号),能正常访问即说明SSL生效。

七、自动续签SSL并更新证书
1Panel已默认开启证书自动续签,无需额外配置续签触发;需修改脚本实现续签后自动同步证书到fnOS并更新服务。
(1)获取fnOS证书存储路径
- 进入1Panel终端,输入以下命令查看证书路径配置文件:
cat /usr/trim/etc/network_cert_all.conf

- 复制输出结果中
.crt文件的前一级目录路径(示例:/usr/trim/var/trim_connect/ssls/xxx.com/1740193347)。
(2)修改证书申请后执行脚本
- 回到1Panel【网站】-【证书】页面,选择已申请的证书,点击【编辑】。

- 将【申请证书之后执行脚本】替换为以下内容,需完整配置
CERT_NAME、PANEL_CERT_PATH、FNOS_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 生成)