使用1Panel推送SSL证书到ikuai

一个脚本解决每次证书到期后需要手动更新证书到ikuai的痛点

说明

本脚本无需SSH/Telnet连接,而是通过模拟iKuai Web端请求实现证书上传。

场景

  1. 定时任务推送创建系统定时任务定期执行脚本
  2. 1Panel联动推送(推荐教程方式)在1Panel申请证书后,通过其执行脚本功能自动触发本脚本

脚本

代码中需要根据自身情况填写5处地方才可以正常使用。

(代码中有明确标注!!!)

  1. 填写证书及私钥的存放路径
  2. 填写iKuai的ip
  3. 填写证书文件名
  4. 填写私钥文件名
  5. 填写ikuai admin账户的密码
import hashlib
import base64
import requests

# --------------------------------需指定参数--------------------------------------
ssl_path = r"/usr/trim/var/trim_connect/ssls/yuaxi.cn/1754736506"   # 证书存放的路径(绝对路径)
iKuai_ip = "10.0.0.2"   #ikaui的ip
cert_name = "fullchain.pem"  # 证书文件名
key_name = "privkey.pem"    # 私钥文件名
password = "************"    # iKuai admin账户密码
# ------------------------------------------------------------------------------

salt = "salt_11"
passwdMd5 = hashlib.md5(password.encode("utf-8")).hexdigest()
passBase64 = base64.b64encode((salt + password).encode("utf-8")).decode()

login_url = f"https://{iKuai_ip}/Action/login"
login_data = {
    "username": "admin",
    "passwd": passwdMd5,
    "pass": passBase64,
    "remember_password": "true"
}
session = requests.Session()
status = session.post(url=login_url, json=login_data, verify=False)

ssl_url = f"https://{iKuai_ip}/Action/call"

with open(rf"{ssl_path}/{cert_name}", "r") as f:
    ssl_cert = f.read().replace(' ', '#').replace('n', '@')
with open(rf"{ssl_path}/{key_name}", "r") as f:
    priv_key  = f.read().replace(' ', '#').replace('n', '@')
ssl_data = {
    "func_name": "key_manager",
    "action": "save",
    "param": {
        "ca": ssl_cert, # 证书
        "key": priv_key,   # 私钥
        "id": 1,
        "enabled": "yes",   # 是否启用
        "comment": "yuaxi.cn"  # 备注
    }
}
result = session.post(url=ssl_url, json=ssl_data, verify=False)
print(result.text)

上传脚本

可以通过ssh的方式或者直接在1panel的web界面左侧菜单栏主机->文件中选择一个文件夹后点击创建输入文件名.py之后将代码粘贴进去。需要记住脚本所在的绝对路径。

配置1Panel

进入1panel后在左侧菜单栏网站->证书中可以看到你已经申请的证书,点击你需要上传到ikuai的证书右侧的编辑,勾选申请证书后执行脚本并在输入框中输入下面的命令

sudo python3 绝对路径/脚本名.py

之后点击确认可在日志中查看是否执行成功,如果成功则返回“{“Result”:30000,”ErrMsg”:”Success”}”

评论

  1. stonereg
    已编辑
    1 月前
    2025-10-28 16:22:13

    你好,很高兴能看到你的这篇文章,但是我实测发现登录是正确的,返回
    {“ErrMsg”:”Success”,”Result”:10000}
    但是post证书时会报错:
    {“ErrMsg”:”Invalid characters: —–BEGIN#CERTIFICATE—–nMIIFAjCCA+qgAwIBAgISBtwRfy2…..”Result”:10013}
    请问有什么思路吗,是不是参数还是不对
    import hashlib
    import base64
    import requests
    ssl_path = r”/etc/ohttps/certificates/cert/”
    iKuai_ip = “10.10.10.253:1443”
    cert_name = “fullchain.cer”
    key_name = “cert.key”
    password = “mima1111”

    ——————————————————————————

    salt = “salt_11”
    passwdMd5 = hashlib.md5(password.encode(“utf-8”)).hexdigest()
    passBase64 = base64.b64encode((salt + password).encode(“utf-8″)).decode()
    login_url = f”https://{iKuai_ip}/Action/login”
    login_data = {
    “username”: “admin”,
    “passwd”: passwdMd5,
    “pass”: passBase64,
    “remember_password”: “true”
    }
    session = requests.Session()
    status = session.post(url=login_url, json=login_data, verify=False)
    print(status.text)
    ssl_url = f”https://{iKuai_ip}/Action/call”
    with open(rf”{ssl_path}/{cert_name}”, “r”) as f:
    ssl_cert = f.read().replace(‘ ‘, ‘#’).replace(‘n’, ‘@’)
    with open(rf”{ssl_path}/{key_name}”, “r”) as f:
    priv_key = f.read().replace(‘ ‘, ‘#’).replace(‘n’, ‘@’)
    ssl_data = {
    “func_name”: “key_manager”,
    “action”: “save”,
    “param”: {
    “ca”: ssl_cert,
    “key”: priv_key,
    “id”: 1,
    “enabled”: “yes”,
    “comment”: “openwrt”
    }
    }
    result = session.post(url=ssl_url, json=ssl_data, verify=False)
    print(result.text)

    • 博主
      stonereg
      已编辑
      5 天前
      2025-12-02 23:18:14

      有几个地方需要确认无误。第一你的证书和密钥是否都在/etc/ohttps/certificates/cert/下,第二要确保证书和密钥的格式是正确的,你可以直接复制证书和密钥到ikuai里面提交验证一下。如果还是不能解决可以在网站首页添加我的b站好友方便协助你排查问题。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇