开启左侧

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

发表于:2025-2-22 16:03:15 技术整活 1043

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.crtxxx.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了~

结语

理论可行,作者也是刚配置完,具体还是要看下自动更新能否生效。权限什么的都检查不会有问题才对。如果有谬误还请大佬指出,不胜感激!

收藏
送赞 3
分享

发表回复

评论列表(16)

申请不了证书,状态老是失败
2025-2-22 23:48:30 回复
禁用cname并跳过DNs校验  详情 回复
3 天前
可以了,貌似是夜里不能申请证书,妥妥的,感谢老哥  详情 回复
2025-2-23 19:13
好,说的非常详细
2025-2-23 13:59:57 回复
可以了,貌似是夜里不能申请证书,妥妥的,感谢老哥
2025-2-23 19:13:35 回复
哈哈哈~好的好的~  详情 回复
2025-2-24 16:44
也可以用lucky来实现,只要设置一下反向代理就很好用。
2025-2-23 21:15:17 回复
我是用lucky测试了下,感觉有点麻烦~才想着说用1panel的哈哈~  详情 回复
2025-2-24 16:45
收藏收藏,好贴!
2025-2-24 09:25:10 回复
谢佳润 发表于 2025-2-23 19:13
可以了,貌似是夜里不能申请证书,妥妥的,感谢老哥

哈哈哈~好的好的~
2025-2-24 16:44:39 回复
我是用lucky测试了下,感觉有点麻烦~才想着说用1panel的哈哈~
2025-2-24 16:45:22 回复
除去lucky的初始化操作(也就账号密码和安全入口),设置一下证书(选择运营商、填写账号密码、域名后,等申请完成,以后就自动续签),最后设置反代(添加web服务规则,选上IPv4,设置端口[路由也需要做相同的端口  详情 回复
2025-2-25 23:11
summer 发表于 2025-2-24 16:45
我是用lucky测试了下,感觉有点麻烦~才想着说用1panel的哈哈~

除去lucky的初始化操作(也就账号密码和安全入口),设置一下证书(选择运营商、填写账号密码、域名后,等申请完成,以后就自动续签),最后设置反代(添加web服务规则,选上IPv4,设置端口[路由也需要做相同的端口映射],启用TLS,添加子规则,设置前端域名,设置后端地址,有多个就继续添加子规则)。
2025-2-25 23:11:28 回复
大哥**,解决该死的腾讯云只有90天有效期到问题了
2025-2-26 15:20:03 回复
我将你重命名复制到指定目录的步骤简化成软连接了。
2025-2-26 21:25:28 回复
写的很详细,谢谢楼主了,解决了一个大问题,不然过一段时间就得来一次。
4 天前 回复
大佬,这失败是什么问题呢?用的是腾讯云
[INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz/XXXXXXXXXXXXXXXX
申请  [XXXXXX] 证书失败, error: one or more domains had a problem:
[XXXXX] propagation: time limit exceeded: last error: [zone=XXXXX] could not determine authoritative nameservers
3 天前 回复
谢谢,搞定了,要自定义dns  详情 回复
3 天前
谢谢,搞定了,要自定义dns
3 天前 回复
禁用cname并跳过DNs校验
3 天前 1 回复
025/03/05 20:52:35 证书推送到目录 [/vol1/1000/cert] 成功
2025/03/05 20:52:35 开始执行脚本
cp: cannot stat '/vol1/1000/cert/visin.top.*': No such file or directory
chmod: cannot access '/usr/trim/var/trim_connect/ssls/visin.top/1741073644/*': No such file or directory
UPDATE 1
2025/03/05 20:52:38 脚本执行成功

完整脚本好像是不行 重命名没问题,复制到飞牛证书目录好像是不行了
前天 20:58 回复
正常,没有权限,解决办法就是使用软链接,就是相当脚本要手动执行一次创建软链接,之后就自动更新了  详情 回复
昨天 17:23
正常,没有权限,解决办法就是使用软链接,就是相当脚本要手动执行一次创建软链接,之后就自动更新了
昨天 17:23 回复
话题