【问题标题】:Python requests Module. SSL Cert Verification bugPython 请求模块。 SSL 证书验证错误
【发布时间】:2014-09-03 00:07:07
【问题描述】:

我正在尝试使用 requests 模块向需要 ssl auth 的端点发出 post 请求。我的 pem 文件位于指定路径中,包含客户端证书和私钥。但是,我不断收到 Certificate Verified Failed 异常。我在 nginx 日志中看到该请求甚至从未到达那里。任何人有任何想法为什么?我知道证书应该可以工作。

params = {    
          "param_2" : "32100",
          "param_1" : "abc"
          }

headers = {
           "Content-Type" : "application/json"
          }
body = json.dumps(params)

r = requests.post(
                  https://somesite.com/somepath,
                  data=body,
                  headers=headers,
                  timeout=10,
                  verify="/path/to/cert.pem"
                  )

Traceback (most recent call last):
File "./somefile.py", line 264, in <module>
    start()
File "./somefile.py", line 149, in start
    verify="/path/to/cert.pem"
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 88, in post
    return request('post', url, data=data, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 448, in    request
    resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 554, in send
   r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 417, in send
   raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL     routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

【问题讨论】:

    标签: python ssl python-requests client-certificates


    【解决方案1】:

    来自请求文档:

    如果您设置了请求也可以忽略验证 SSL 证书 验证为 False。

    requests.get('https://kennethreitz.com', verify=False)

    默认情况下,验证设置为 True。选项验证仅适用于主机 证书。

    您还可以指定本地证书用作客户端证书, 作为单个文件(包含私钥和证书)或 作为两个文件路径的元组:

    requests.get('https://kennethreitz.com', cert=('/path/server.crt', '/path/key'))

    所以看起来你只是弄错了参数。尝试使用“cert”而不是验证。

    【讨论】:

    • verify=False 可能不是您想要的。如果您不验证证书,则使用 SSL 毫无意义。
    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2021-11-10
    • 2014-03-28
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多