2015-06-22 197 views
0

我想使用Rest接口的Python包装器连接到JIRA,并且我无法让它工作。我已经阅读了所有我能找到的东西,所以这是我的最后一招。Python - >请求连接失败,“证书验证失败”

我已经尝试了很多的东西,包括

verify=False

但至今没有奏效。

奇怪的是,随着urllib.request里,它的工作没有任何的SSL证书(这只是一些内部CERT),但我们的目标是使用Python吉拉包装,所以它不是一个真正的选择...

我试过Python 3.4和2.7 ...越来越绝望...

任何想法?

的代码非常简单:

import requests 
r = requests.get('https://jiratest.myurl.com/rest/api/2/serverInfo') 
print(r.content) 

错误:

C:\Python34\python.exe C:/projects/jirascriptsx/delete_worklogs.py 
Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 544, in urlopen 
    body=body, headers=headers) 
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 341, in _make_request 
    self._validate_conn(conn) 
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 761, in _validate_conn 
    conn.connect() 
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connection.py", line 238, in connect 
    ssl_version=resolved_ssl_version) 
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\util\ssl_.py", line 279, in ssl_wrap_socket 
    return context.wrap_socket(sock, server_hostname=server_hostname) 
    File "C:\Python34\lib\ssl.py", line 365, in wrap_socket 
    _context=self) 
    File "C:\Python34\lib\ssl.py", line 583, in __init__ 
    self.do_handshake() 
    File "C:\Python34\lib\ssl.py", line 810, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\requests\adapters.py", line 370, in send 
    timeout=timeout 
    File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 574, in urlopen 
    raise SSLError(e) 
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:/projects/jirascriptsx/delete_worklogs.py", line 4, in <module> 
    r = requests.get('https://jiratest.uniqa.at/rest/api/2/serverInfo') 
    File "C:\Python34\lib\site-packages\requests\api.py", line 69, in get 
    return request('get', url, params=params, **kwargs) 
    File "C:\Python34\lib\site-packages\requests\api.py", line 50, in request 
    response = session.request(method=method, url=url, **kwargs) 
    File "C:\Python34\lib\site-packages\requests\sessions.py", line 465, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python34\lib\site-packages\requests\sessions.py", line 573, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Python34\lib\site-packages\requests\adapters.py", line 431, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600) 

Process finished with exit code 1 
+0

你有没有尝试在8080端口上的网址打开验证? –

+0

[Python请求抛出SSLError]的可能重复(http://stackoverflow.com/questions/10667960/python-requests-throwing-up-sslerror) –

+0

端口与任何事情有什么关系?其他问题的建议都没有帮助(我读过了那一个) – SebK

回答

0

有一个与我们的基础设施,这似乎带出一个错误的请求模块里进行SSL验证忽略标志问题无法正常工作。 任何Stackoverflow文章中提供的解决方案都不起作用。

作为解决方法,我直接在服务器上运行代码。

0

如果你有证书文件(Certificate.pem)以及密钥文件(Key.pem),那么我们可以这样

cert=/path/to/certificate_file 
key_file=/path/to/key_file 
url=https://jiratest.myurl.com/rest/api/2/serverInfo 

with requests.session() as session: 
    session.cert=(cert,key_file) 
    session.auth=(username,base64.urlsafe_b64decode(password)) 
    response=session.get(url) 
if response.status_code == 200: 
    json_data = response.json() 
相关问题