python - 带有证书和密钥“验证失败”的 Python3 请求
问题描述
我正在尝试从端点请求数据,我可以这样做curl -k --key a-key.pem --cert a.pem https://<endpoint>
但是当我使用python3来做到这一点时,我每次都失败了
例子:
卷曲:
root@control-plane-0:~# curl -k --key /etc/kubernetes/a-key.pem --cert /etc/kubernetes/a.pem https://127.0.0.1:6443/api/
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.31.2:6443"
}
]
}
使用python:(代码):
from flask import Flask, render_template
import requests
from ast import literal_eval
app = Flask(__name__)
@app.route('/metrics')
def metrics():
data = requests.get("https://127.0.0.1:6443/api/, cert=('/etc/kubernetes/a.pem', '/etc/kubernetes/a-key.pem'))
print(data)
return data
if __name__ == '__main__':
app.run(host='0.0.0.0',port="5001", debug=True)
结果:
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='127.0.0.1', port=6443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1121)')))
请求库有什么问题吗?我找不到让它工作的方法
解决方案
您是否已使用验证您的证书
openssl verify -CAfile your-cert.pm
我遇到了同样的问题并通过使用全链证书解决。请查看您的证书包含全链(根,中间)。你可以试试
import requests
test=request.get("url",verify="certificate-with-path")
推荐阅读
- javascript - React 中的强制组件渲染
- android - 为什么连续添加多个空格时,使用字符串创建的位图的空格宽度会变短?
- android - 如何使 Ionic Toast 与屏幕阅读器更兼容
- python - InvalidArgumentError:不兼容的形状:[32] 与 [8] - Keras 迁移学习
- c# - 在 C# 中执行异步操作的正确方法
- spring - 将 SSL 添加到 sprint 引导
- c - C自动定义数组大小
- bash - 在测试函数中使用参数调用bash函数
- c# - Xamarin Forms 使用时不显示新页面
元素和SDK - python - 解析 txt 文件并根据列表提取特定部分