[GH-ISSUE #450] [Feature] 宝塔站点和管理后台证书设置 #278

Closed
opened 2026-03-03 01:02:08 +03:00 by kerem · 5 comments
Owner

Originally created by @fcwys on GitHub (Feb 12, 2025).
Original GitHub issue: https://github.com/certimate-go/certimate/issues/450

功能描述
希望完善支持宝塔站点和管理面板设置证书接口。最新测试版宝塔这个接口只针对PHP站点有效,新接口是/ssl?action=SetBatchCertToSite,此接口支持所有类型站点设置,可考虑再流程编排输入框支持分号设置多个站点。
设置宝塔站点证书流程如下:
1、上传SSL证书到宝塔,获取证书hash;
2、通过新接口绑定证书到站点(支持批量);

上传证书接口信息(POST):
路径:/ssl/cert/save_cert
请求表单参数:

key: "证书key内容"
csr: "证书内容"

响应示例:

{
    "status": true,
    "msg": "保存成功",
    "creat_order": false,
    "ssl_hash": "41580efa96e96744665a12a08e784c79"	# 证书hash,下文接口使用
}

设置站点证书接口信息(POST):
路径:/ssl?action=SetBatchCertToSite
请求表单参数:

BatchInfo: [
{
        "ssl_hash": "证书hash",
        "siteName": "站点名称1",
        "certName": "证书名称(经过测试可不传)"
    },
	{
        "ssl_hash": "证书hash",
        "siteName": "站点名称2",
        "certName": "证书名称(经过测试可不传)"
    }
]

响应示例:

{
    "total": 1,		# 设置站点数
    "success": 1,	# 成功站点数
    "faild": 0,		# 失败站点数
    "successList": [	# 成功站点列表
        {
            "status": true,
            "certName": "*.aaa.com",
            "siteName": "demo.aaa.com"
        }
    ],
    "faildList": [
		# 失败站点列表
	]
}

设置面板SSL接口信息(POST):
路径:/config?action=SavePanelSSL
请求表单参数:

privateKey: "证书key内容"
certPem: "证书内容"

响应示例:

{
    "status": true,
    "msg": "证书已保存!"
}

动机
目前最新测试版已实现宝塔站点设置,但不够完善 #448 #434

替代方案

其他信息
最新测试版0.3.0-alpha.12设置宝塔站点失败截图:
Image

Originally created by @fcwys on GitHub (Feb 12, 2025). Original GitHub issue: https://github.com/certimate-go/certimate/issues/450 **功能描述** 希望完善支持宝塔站点和管理面板设置证书接口。最新测试版宝塔这个接口只针对PHP站点有效,新接口是`/ssl?action=SetBatchCertToSite`,此接口支持所有类型站点设置,可考虑再流程编排输入框支持分号设置多个站点。 设置宝塔站点证书流程如下: 1、上传SSL证书到宝塔,获取证书hash; 2、通过新接口绑定证书到站点(支持批量); **上传证书接口信息(POST):** 路径:`/ssl/cert/save_cert` 请求表单参数: ``` key: "证书key内容" csr: "证书内容" ``` 响应示例: ```json { "status": true, "msg": "保存成功", "creat_order": false, "ssl_hash": "41580efa96e96744665a12a08e784c79" # 证书hash,下文接口使用 } ``` **设置站点证书接口信息(POST):** 路径:`/ssl?action=SetBatchCertToSite` 请求表单参数: ``` BatchInfo: [ { "ssl_hash": "证书hash", "siteName": "站点名称1", "certName": "证书名称(经过测试可不传)" }, { "ssl_hash": "证书hash", "siteName": "站点名称2", "certName": "证书名称(经过测试可不传)" } ] ``` 响应示例: ```json { "total": 1, # 设置站点数 "success": 1, # 成功站点数 "faild": 0, # 失败站点数 "successList": [ # 成功站点列表 { "status": true, "certName": "*.aaa.com", "siteName": "demo.aaa.com" } ], "faildList": [ # 失败站点列表 ] } ``` **设置面板SSL接口信息(POST):** 路径:`/config?action=SavePanelSSL` 请求表单参数: ``` privateKey: "证书key内容" certPem: "证书内容" ``` 响应示例: ```json { "status": true, "msg": "证书已保存!" } ``` **动机** 目前最新测试版已实现宝塔站点设置,但不够完善 #448 #434 **替代方案** 无 **其他信息** 最新测试版0.3.0-alpha.12设置宝塔站点失败截图: ![Image](https://github.com/user-attachments/assets/df65e1ef-b6a5-43aa-9fe5-634ba8b22626)
kerem 2026-03-03 01:02:08 +03:00
Author
Owner

@fudiwei commented on GitHub (Feb 12, 2025):

/site?action=SetSSL 这个接口是已经没有了吗?

<!-- gh-comment-id:2653657086 --> @fudiwei commented on GitHub (Feb 12, 2025): `/site?action=SetSSL` 这个接口是已经没有了吗?
Author
Owner

@fcwys commented on GitHub (Feb 12, 2025):

/site?action=SetSSL 这个接口是已经没有了吗?

经过这几天测试这个接口仅针对PHP分类站点有效,其他分类会报错。我自己用python写的工具,目前使用上传然后绑定的接口测试是正常的,新接口批量绑定站点也比较方便,所以建议使用新接口。
此外,如果可能,选择部署站点建议从接口获取站点列表,采用多选下拉框的方式(如下图)会更方便

Image

获取证书匹配的站点接口:/ssl?action=GetSiteDomain
请求表单(证书域名):

cert_list: ["*.aaa.com","aaa.com"]

响应示例:

{
    "all": [   // 这里是所有的站点列表
        "a.aaa.com",
        "b.aaa.com",
        "a.abc.com",
        "www.bbb.com",
        "demosite"
    ],
    "site": [     // 这里是证书匹配的站点列表
        "a.aaa.com",
        "b.aaa.com",
        "demosite"
    ]
}

宝塔SSL绑定站点页面:

Image

Image

<!-- gh-comment-id:2654087258 --> @fcwys commented on GitHub (Feb 12, 2025): > `/site?action=SetSSL` 这个接口是已经没有了吗? 经过这几天测试这个接口仅针对PHP分类站点有效,其他分类会报错。我自己用python写的工具,目前使用上传然后绑定的接口测试是正常的,新接口批量绑定站点也比较方便,所以建议使用新接口。 此外,如果可能,选择部署站点建议从接口获取站点列表,采用多选下拉框的方式(如下图)会更方便 ![Image](https://github.com/user-attachments/assets/edd08952-c151-47f4-b517-7516d24c1b75) 获取证书匹配的站点接口:`/ssl?action=GetSiteDomain` 请求表单(证书域名): ``` cert_list: ["*.aaa.com","aaa.com"] ``` 响应示例: ``` { "all": [ // 这里是所有的站点列表 "a.aaa.com", "b.aaa.com", "a.abc.com", "www.bbb.com", "demosite" ], "site": [ // 这里是证书匹配的站点列表 "a.aaa.com", "b.aaa.com", "demosite" ] } ``` 宝塔SSL绑定站点页面: ![Image](https://github.com/user-attachments/assets/160b8855-b6ac-4c99-ac35-9f7a271a3ee9) ![Image](https://github.com/user-attachments/assets/30da942d-4608-4212-a6b2-1b3238049d87)
Author
Owner

@fudiwei commented on GitHub (Feb 13, 2025):

经过这几天测试这个接口仅针对PHP分类站点有效,其他分类会报错。

报错内容就是截图里的那个是 404 是吗?按我的理解这种 API 接口即便报错,也不应该是返回一个 404 的 HTML 页面才对。

<!-- gh-comment-id:2655245889 --> @fudiwei commented on GitHub (Feb 13, 2025): > 经过这几天测试这个接口仅针对PHP分类站点有效,其他分类会报错。 报错内容就是截图里的那个是 404 是吗?按我的理解这种 API 接口即便报错,也不应该是返回一个 404 的 HTML 页面才对。
Author
Owner

@fcwys commented on GitHub (Feb 13, 2025):

404这个是我用最新版测试的,不知道为啥是404,我的面板接口是类似 https://bt.aaa.com:9000 这种格式,不知道是不是识别有啥问题,接口白名单也加了。

新老接口这个是我Python暂时写的小工具设置证书测试的。

另外可否了解下您那边使用这个接口是宝塔哪个版本呢?
我目前使用的是宝塔9.4.0

<!-- gh-comment-id:2655452832 --> @fcwys commented on GitHub (Feb 13, 2025): 404这个是我用最新版测试的,不知道为啥是404,我的面板接口是类似 `https://bt.aaa.com:9000` 这种格式,不知道是不是识别有啥问题,接口白名单也加了。 新老接口这个是我Python暂时写的小工具设置证书测试的。 另外可否了解下您那边使用这个接口是宝塔哪个版本呢? 我目前使用的是宝塔9.4.0
Author
Owner

@fcwys commented on GitHub (Feb 24, 2025):

经过测试,/site?action=SetSSL/ssl/cert/save_cert 接口仍然出现404的情况,如图为Certimate错误日志:

Image

抓包进行Certmate和宝塔面板原生 /ssl/cert/save_cert 接口请求进行对比如下,似乎是请求类型差异导致:

请求参数对比:
Image
Image

请求头对比:
Image
Image

<!-- gh-comment-id:2677331467 --> @fcwys commented on GitHub (Feb 24, 2025): **经过测试,`/site?action=SetSSL` 和 `/ssl/cert/save_cert` 接口仍然出现404的情况,如图为Certimate错误日志:** ![Image](https://github.com/user-attachments/assets/0b6f3767-22e2-45de-aa9d-f3e124a8b967) ### 抓包进行Certmate和宝塔面板原生 `/ssl/cert/save_cert` 接口请求进行对比如下,似乎是请求类型差异导致: **请求参数对比:** <img width="875" alt="Image" src="https://github.com/user-attachments/assets/1a3f90db-9382-493d-91dc-bdb1e08dc314" /> <img width="875" alt="Image" src="https://github.com/user-attachments/assets/7e8dbfe4-bdfd-4f41-93c1-92700a3a0930" /> **请求头对比:** <img width="877" alt="Image" src="https://github.com/user-attachments/assets/22668296-ba24-4323-880c-6ecfed5e2ed5" /> <img width="876" alt="Image" src="https://github.com/user-attachments/assets/1f192cd4-a7be-4410-9d3d-c8fa2863f57d" />
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/certimate#278
No description provided.