收起左侧

使用python selenium自动更新acme证书

2
回复
790
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

fnOS系统内测组

2025-2-7 13:11:34 显示全部楼层 阅读模式

fnos目前还未开放acme自动更新证书的接口,我这里使用python selenium库实现了一个自动更新证书的脚本

安装依赖

  1. 登录 ssh
  2. 安装python selenium库
    sudo apt-get install python3-selenium

在 web 配置界面新增证书

该脚本的原理是模拟浏览器登录fnos后台并更新证书的过程,因此需要手动新增证书,使得页面出现证书编辑按钮

image.png

保存脚本与配置

在任意目录保存示例更新脚本 \path\update.py

from selenium import webdriver
from selenium.webdriver.chromium.service import ChromiumService
from selenium.webdriver.common.by import By
import json
import os

dir = os.path.dirname(__file__)
config = json.loads(open(os.path.join(dir, 'config.json')).read()) # 运行时目录下的 config.json

service = ChromiumService(executable_path='/usr/bin/chromedriver')
options = webdriver.ChromeOptions()
options.add_argument("--headless")  # 启用无头模式
options.add_argument("--disable-gpu")  # 禁用GPU加速
options.add_argument("--no-sandbox")  # 禁用沙箱模式,解决某些环境下的启动问题
driver = webdriver.Chrome(service=service, options=options)

driver.implicitly_wait(10)  # 最多等待 10 秒
driver.set_window_size(1400, 800)
driver.get('http://127.0.0.1:5666')

# login
user = config['user']
driver.find_element(By.ID, 'username').send_keys(user['username'])
driver.find_element(By.ID, 'password').send_keys(user['password'])
driver.find_element(By.XPATH, "//span[text()='登录']").click()

# settings
driver.find_element(By.XPATH, "//div[text()='系统设置']").click()
driver.find_element(By.XPATH, "//div[text()='安全性']").click()
driver.find_element(By.XPATH, "//div[text()='证书']").click()

# cert
cert = config['cert']
driver.find_element(By.XPATH, f"//div[div/div/div/span[text()='{cert['name']}']]//span[text()='编辑']").click()
driver.find_element(By.XPATH, "//div[label/div[text()='证书 ']]//div//input").send_keys(cert['cert'])
driver.find_element(By.XPATH, "//div[label/div[text()='私钥']]//div//input").send_keys(cert['key'])
driver.find_element(By.XPATH, "//span[text()='确认']").click()

print('done')

同时,在相同目录下保存配置文件 \path\config.json

{
    "user": {
        "username": "username",
        "password": "password"
    },
    "cert": {
        "name": "example.com",
        "cert": "/path/example.com.crt",
        "key": "/path/example.com.key"
    }
}

其中包括

user:
  username: fnos管理员用户的用户名
  passward: 密码
cert:
  name: 上一步手动新增证书的描述
  cert: 证书路径
  key: 私钥路径

安装acme.sh

这里可以参考 这篇文章 进行安装

部署证书

在 acme.sh 的更新命令中执行脚本即可

acme.sh --install-cert -d example.com \
        --fullchain-file /path/example.com.crt --key-file /path/example.com.key \
        --reloadcmd "python3 \path\update.py"
收藏
送赞 2
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

10

回帖

0

牛值

江湖小虾

大佬,FN中怎么运行PY程序呀,我想搭建泰拉瑞亚服务器,只有IPV6,在网上找到了“将IPv6的指定端口流量转发到内网IPv4的指定端口”的PY脚本,但是不知道怎么在NAS中运行。cry

这是脚本地址 https://github.com/xiehuajieaa/NATport  详情 回复
4 天前

0

主题

10

回帖

0

牛值

江湖小虾

w8809486 发表于 2025-6-5 12:37
大佬,FN中怎么运行PY程序呀,我想搭建泰拉瑞亚服务器,只有IPV6,在网上找到了“将IPv6的指定端口流量转发 ...

这是脚本地址  https://github.com/xiehuajieaa/NATport
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则