2014-09-03 178 views
0

我正在尝试使用请求模块向需要ssl身份验证的端点发出发布请求。我的pem文件在指定的路径中,包含客户端证书和私钥。但是,我不断收到证书验证失败异常。我在nginx日志中看到,请求甚至从未将它发送到那里。任何人有任何想法为什么?我知道这些证书应该起作用。Python请求模块。 SSL证书验证错误

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 

回答

2

从请求文档:

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

requests.get( 'https://kennethreitz.com',验证=假)

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

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

requests.get( 'https://kennethreitz.com',证书=( '/路径/ server.crt这', '/路径/键'))

所以看来你刚刚得到了错误的参数。尝试使用'cert'而不是验证。

+0

是的,它与“verify = False”一起工作。谢谢! – user695624 2014-09-04 05:24:25

+0

verify = False可能不是你想要的..如果你没有验证证书,那么使用SSL是没有意义的。 – synthesizerpatel 2014-09-04 12:51:38