2017-08-11 74 views
1

在Python 3.5製作一個GET請求與urllib3與一些網站上,其中證書是有效的錯誤CERTIFICATE_VERIFY_FAILED失敗。urllib3 CERTIFICATE_VERIFY_FAILED一些網站上提供有效證明

import certifi 
import urllib3 
manager = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where()) 
http.request('GET', 'https://google.com') 

給出這樣的錯誤:

Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 601, in urlopen 
    chunked=chunked) 
    File "/usr/local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 346, in _make_request 
    self._validate_conn(conn) 
    File "/usr/local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 850, in _validate_conn 
    conn.connect() 
    File "/usr/local/lib/python3.5/site-packages/urllib3/connection.py", line 326, in connect 
    ssl_context=context) 
    File "/usr/local/lib/python3.5/site-packages/urllib3/util/ssl_.py", line 329, in ssl_wrap_socket 
    return context.wrap_socket(sock, server_hostname=server_hostname) 
    File "/usr/local/lib/python3.5/ssl.py", line 376, in wrap_socket 
    _context=self) 
    File "/usr/local/lib/python3.5/ssl.py", line 747, in __init__ 
    self.do_handshake() 
    File "/usr/local/lib/python3.5/ssl.py", line 983, in do_handshake 
    self._sslobj.do_handshake() 
    File "/usr/local/lib/python3.5/ssl.py", line 628, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:646) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/requests/adapters.py", line 440, in send 
    timeout=timeout 
    File "/usr/local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 639, in urlopen 
    _stacktrace=sys.exc_info()[2]) 
    File "/usr/local/lib/python3.5/site-packages/urllib3/util/retry.py", line 388, in increment 
    raise MaxRetryError(_pool, url, error or ResponseError(cause)) 
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url:/(Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:646)'),)) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.5/site-packages/requests/api.py", line 72, in get 
    return request('get', url, params=params, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/requests/api.py", line 58, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/requests/sessions.py", line 508, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python3.5/site-packages/requests/sessions.py", line 618, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/requests/adapters.py", line 506, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url:/(Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:646)'),)) 

然而,隨着openssl命令行成功提出同樣的要求。

openssl s_client -showcerts -connect google.com:443 -CAfile /usr/local/lib/python3.5/site-packages/certifi/cacert.pem 

對於某些但不是所有域的Urllib3都會失敗。 例如下列成功。

http.request('GET', 'https://bbc.com') 

這發生在運行Debian GNU/Linux 8的kubernetes pod上。使用python3.5 docker鏡像。

回答

0

我不能Python的3.6泊塢窗圖像上重現此。你可能使用的是不具有證書捆綁預裝苗條或高山的形象?

0

我認爲這可能是Linux的一個簡化版本。我安裝了pyopenssl和ndg-httpsclient,它現在可以工作。

相關問題