【问题标题】:Python3 reques with cert and key "verified fail"带有证书和密钥“验证失败”的 Python3 请求
【发布时间】:2020-10-30 06:35:15
【问题描述】:

我正在尝试从端点请求数据,我可以使用 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)')))

请求库有什么问题吗? 我找不到让它工作的方法

【问题讨论】:

    标签: python python-3.x ssl kubernetes python-requests


    【解决方案1】:

    您的证书是否已使用验证

    openssl verify -CAfile your-cert.pm
    

    我遇到了同样的问题并通过使用全链证书解决。请查看您的证书包含全链(根,中间)。 你也可以试试

    import requests
    test=request.get("url",verify="certificate-with-path")
    

    【讨论】:

    • 好吧,我发现,我需要结合 verify = ca.pem 和 cert = cert, key 因为我的证书是自签名的
    猜你喜欢
    • 2015-07-26
    • 2013-09-30
    • 1970-01-01
    • 2014-03-28
    • 2018-03-16
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多