fnOS配置SSL证书及简单实现自动续签
前言
本文将实现fnOS配置SSL证书实现https访问并且使用1Panel实现证书自动续签功能
fnOS新建文件夹用以证书存储
点击【文件管理】在你喜欢的磁盘中创建一个文件夹用以存储证书,比如我创建【certs】文件夹在【存储空间2】中

到这一步就先ok了,后面会用到这个文件夹,为了你可以直接看到你的证书
安装1Panel
安装1Panel实现证书申请以及自动续签
安装
应用中心中选择【1Panel】,点击安装

等待下载完成,根据需求配置

这里注意要记住你设置的安全入口名以及用户名/密码,比如我入口设置的是【safe】

点击确定即可

1Panel配置
登录
安装完成后,点击打开Panel

因为开启了安全入口,所以无法访问

在浏览器地址后面添加上安全入口路径即可,比如我的是 http://192.168.2.3:18090/safe

输入用户名密码登录

检查权限
在1Panel中,选择【主机】-【终端】

第一次连接需要手动配置,主机地址就默认就好,输入你fnOS的用户名以及密码,记得是fnOS的,不是1Panel的

点击右下角【连接测试】,然后通过后点击【保存并连接】

可以看到登录成功

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

点击【复制原始路径】

回到1Panel的终端,输入cd+空格+你复制的路径,如下所示
cd /vol2/1000/certs

尝试创建一个文件检查是否可以创建成功
touch 12

没问题,ok了~
SSL证书申请
选择【网站】-【证书】

添加Acme账户
点击【Acme账户】

创建

邮箱填一个,确认即可

添加DNS账户
点击【DNS账户】

创建,选择你的域名服务商,并且填入你的id和key,我这边以阿里云的为例,至于怎么获取这个id和key麻烦大家百度下

申请证书
点击【申请证书】

输入你要申请的证书域名

勾选【推送证书到本地目录】,并且选择刚刚创建的certs文件夹

勾选【申请证书之后执行脚本】,输入下面的脚本,注意这里要把 xxx.com.crt
和 xxx.com.key
中的【xxx.com】换成你自己的域名
#!/bin/bash
mv fullchain.pem xxx.com.crt
mv privkey.pem xxx.com.key
目的就是把生成的证书重命名下

点击确定,等待申请

关闭窗口,刷新下,如果显示正常,就是成功了

回到fnOS中,可以看到证书已经生成了

SSL证书配置
下载刚刚生成的两个证书
在【系统设置】-【安全性】-【证书】中选择【新增证书】

输入描述并且上传刚刚下载的证书文件

可以看到添加成功并且证书有效

访问测试,可以看到ssl生效。
ps: 因为我关闭了80、443强制跳转以及强制https所以需要完整的地址访问,也就是要包含 https://
头和 端口号

自动续签SSL并更新证书
回到1Panel,之前在配置证书申请的时候已经勾选了自动续签,所以不用特殊操作续签动作
修改SSL证书申请脚本
依然是在1Panel的终端,输入
cat /usr/trim/etc/network_cert_all.conf
可以看到证书路径

我们复制到crt文件的前一级目录,比如
/usr/trim/var/trim_connect/ssls/xxx.com/1740193347
点击【网站】-【证书】选择你的证书选择【编辑】

将【申请证书之后执行脚本】修改为如下配置,并且将其中的配置项配置完整
注意要配置【CERT_NAME】【PANEL_CERT_PATH】【FNOS_CERT_PATH】字段
完整文件如下
#!/bin/bash
#配置
CERT_NAME="xxx.com"
PANEL_CERT_PATH="/vol2/1000/certs"
FNOS_CERT_PATH="/usr/trim/var/trim_connect/ssls/xxx.com/1740193347"
# 重命名
mv "$PANEL_CERT_PATH/fullchain.pem" "$PANEL_CERT_PATH/$CERT_NAME.crt"
mv "$PANEL_CERT_PATH/privkey.pem" "$PANEL_CERT_PATH/$CERT_NAME.key"
# 将新证书文件复制到旧证书文件的路径
cp "$PANEL_CERT_PATH/$CERT_NAME.*" "$FNOS_CERT_PATH/" -av
# 设置新证书文件权限为 755
chmod 0755 "$FNOS_CERT_PATH/*"
# 获取新证书的到期日期并更新数据库中的证书有效期
NEW_EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$FNOS_CERT_PATH/$CERT_NAME.crt" | sed "s/^.*=\(.*\)$/\1/")
NEW_EXPIRY_TIMESTAMP=$(date -d "$NEW_EXPIRY_DATE" +%s%3N) # 获取毫秒级时间戳
# 更新数据库中的证书有效期
psql -U postgres -d trim_connect -c "UPDATE cert SET valid_to=$NEW_EXPIRY_TIMESTAMP WHERE domain='$CERT_NAME'"
# 重启服务
systemctl restart webdav.service
systemctl restart smbftpd.service
systemctl restart trim_nginx.service
至此就ok了~
结语
理论可行,作者也是刚配置完,具体还是要看下自动更新能否生效。权限什么的都检查不会有问题才对。如果有谬误还请大佬指出,不胜感激!