Python - >请求连接失败并显示“证书验证失败”

时间:2015-06-22 14:28:06

标签: python ssl

我正在尝试使用用于Rest接口的Python包装器连接到JIRA,但我根本无法使用它。我已经阅读了所有我能找到的东西,所以这是我的最后一招。

我尝试过很多东西,包括

  

验证=假

但到目前为止还没有任何工作。

奇怪的是,使用urllib.request它可以在没有任何SSL证书的情况下工作(它只是一些内部证书),但目标是使用Python Jira包装器,因此它不是一个真正的选项......

我已经尝试过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

2 个答案:

答案 0 :(得分:0)

我们的基础架构存在问题,似乎在请求模块中出现了SSL验证忽略标志无法正常工作的错误。 任何Stackoverflow帖子中提供的解决方案都不起作用。

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

答案 1 :(得分: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()