有人能帮我解决一些证书问题吗?我正在使用 Landscape,并尝试使用 Python API,但出现 CA 不匹配的情况,但我已经下载了 .pem,并将脚本指向 .pem 的位置。我收到 403 和错误:消息:{“message”:“我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。”,“error”:“SignatureDoesNotMatch”}
尝试在没有 CA 的 LAN 上进行一些测试,脚本正在运行 Landscape 的服务器上。这是我的 python 脚本的内容,显然关键信息已更改。
#!/usr/bin/python
import os, json, sys
from landscape_api.base import API, HTTPError
# change these accordingly
uri = "https://placeholder.bla"
key = "VQ6PP8Vxxxxxx971NHRY"
secret = "RZ+IOK0s8+UQkRWfsxxxxxxxxLhSFKDwIf5Df"
ca = "~/api/key.pem"
api = API(uri, key, secret, ca)
try:
computers = api.get_computers(query="alert:security-upgrades")
except HTTPError, e:
print ("\nGot server error:\n"
"Code: %d\n"
"Message: %s\n") % (e.code, e.message)
sys.exit(1)
if len(computers) == 0:
print "No computers have pending security upgrades."
else:
for computer in computers:
print "Id:", computer["id"]
print "Title:", computer["title"]
print "Hostname:", computer["hostname"]
print "Last ping:", computer["last_ping_time"]
print "Memory:", computer["total_memory"]
if computer["reboot_required_flag"]:
print "Needs to reboot!"
print
答案1
确保您的 API 端点 URI 是确切地如 Landscape 服务器中所示。通常,它将以/api/
(包括尾部斜杠)结尾。当然,访问密钥是正确的。
答案2
您实际使用的是 吗~/api/key.pem
?您可能需要在其周围加上一个os.path.expanduser
,或者提供完整路径。