如何使用 FortiWeb v2.0 API 从脚本上传 SSL 证书和私钥?

问题描述 投票:0回答:1

我觉得我快要疯了。

我正在尝试(使用 python 脚本)自动化更新和上传 FortiWeb 代理(版本为 7.0.6)中所有 SSL 证书的机械任务。

我设法自动化从 SSL 存储证书下载的部分。

现在我希望将所有本地保存的证书和密钥上传到代理上。

这就是乐趣的开始。

这里是API文档:https://fndn.fortinet.net/index.php?/fortiapi/939-fortiweb/2535/939/system/

请求的URL:

https://<IP-ADDRESS>:<PORT>/api/v2.0/cmdb/system/certificate.local

请求的标头:

header = {
        "Content-Type": "application/json",
        "Authorization": authToken
    }

请求正文:

data = {
        "data": {
            "name": "test_cert",
            "type": "certificate",
            "status": "ok",
            "comment": "",
            "flag": 0,
            "is-hsm": "no",
            "partition-number": "",
            "certificate": "-----BEGIN CERTIFICATE----- <PEM CERTIFICATE> ----END CERTIFICATE----",
            "private-key": "-----BEGIN PRIVATE KEY----- <PEM KEY> -----END PRIVATE KEY-----",
            "passwd": ""
        }
    }

POST 请求:

requests.post(URL, json=data, headers=header, verify=False)

由于官方文档仅表明“证书”和“私钥”密钥对应的值是PEM格式的字符串,因此我只是复制并粘贴了.crt文件和.key文件的值。

但是我收到此错误:

{ "results": { "errcode": -7721: Invalid certificate } }

我可以保证证书是有效的。 此外,GET 方法按预期工作:它返回所有已上传的证书。

我尝试了这些组合。

  • 首先,我尝试编辑证书文件,删除所有换行符。
  • 我尝试删除“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”行
  • 我尝试使用和不使用前几行对证书进行编码,并使用 www.base64encode.org 上的工具和代码
    with open("certfile.crt", "rb") as read: cert = base64.urlsafe_b64encode(read.read(-1)).decode()
  • 我在手动上传证书时尝试使用 Chrome Web 调试工具中找到的 URL:
    https://<IP-ADDRESS>:<PORT>/api/v2.0/system/certificate.local.import_certificate

我总是收到“错误 500 内部服务器错误”,错误代码:-7721 或 -651

还有什么我可以尝试的吗?

非常感谢。

python ssl-certificate
1个回答
0
投票

我也得到了同样的东西,并且此时我自己开了一张票。

© www.soinside.com 2019 - 2024. All rights reserved.