【问题标题】:Python Request GET with Client Certificate is failing带有客户端证书的 Python 请求 GET 失败
【发布时间】:2017-10-09 13:46:01
【问题描述】:

我正在尝试使用 Python 请求向需要客户端证书的 API 发送 HTTP GET 请求。我正在使用

将 PEM 和密钥文件传递到 GET 请求中
session = requests.Session()
session.get('https://localhost/rest/containers/7uyeogzKQayw4mmQmcJb2Q/listeners', cert=('development.pem', 'development.key'))

进行此调用时,我使用 NGINX 作为端点,我得到:

2017-10-07 21:18:16,874 - containerLogger - DEBUG - code:400   text:
<html>
<head><title>400 No required SSL certificate was sent</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.12.1</center>
</body>
</html>

我已经使用相同的证书对相同的端点使用 POST 请求测试了相同的 API,并且它是成功的。我已经使用浏览器 (Firefox) 成功验证了相同的 GET。

我目前正在尝试找出 POST 成功但 GET 失败的原因。我在寻找答案时没有任何运气。

不确定这是由于请求还是 urllib3。

版本:

  • Java 1.8
  • Jython 2.7.1
  • Python 2.7.10
  • 请求 2.18.1
  • urllib3
  • 证书 2017.04.17

非常感谢任何帮助。

干杯 - 埃里克

【问题讨论】:

    标签: python python-requests urllib3


    【解决方案1】:

    当您创建session = requests.Session() 时,文档请求您拥有session.cert = '/path/to/client-cert.crt'

    更简单的方法是将其作为元组传递。

    requests.get('https://localhost/rest/containers/7uyeogzKQayw4mmQmcJb2Q/listeners', cert=('/path/client.cert', '/path/client.key'))
    

    文档链接

    【讨论】:

    • 我不确定你想说什么。我已经将证书添加为对 get 的调用的元组。我什至尝试更改为通过会话使用请求,但它仍然失败。使用 session.cert 只是根据文档设置证书的一种持久方式。
    【解决方案2】:

    我偶然发现了同样的问题。 这是我的解决方案:

    response = requests.get(url, cert=(curr_cert, curr_key), verify=False)
    print response.content
    

    您缺少可信证书。 Requests 为 HTTPS 请求验证 SSL 证书,就像 Web 浏览器一样。默认情况下,启用 SSL 验证,如果无法验证证书,Requests 将抛出 SSLError(就像您的情况一样)

    verify=False 应该可以解决问题

    通过设置 verify=False,您将收到如下警告:

    InsecureRequestWarning:正在发出未经验证的 HTTPS 请求。强烈建议添加证书验证。见:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

    如果您确实想验证 ssl 验证,以下应该会有所帮助:

    response = requests.get(url, cert=(curr_cert, curr_key), verify=verify='/path/to/trustedcertfile')
    print response.content
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-24
      • 2019-02-28
      • 2011-11-21
      • 1970-01-01
      • 2013-11-07
      • 2013-07-08
      • 2013-09-30
      相关资源
      最近更新 更多