wake-up-neo.net

Python-Anfragen erhalten SSL-Fehler

Beim Versuch, eine einfache Abrufanforderung mithilfe der Anforderungssitzung zu erstellen, erhalte ich jedoch weiterhin SSLerror für eine bestimmte Website. Ich denke, vielleicht liegt das Problem an der Website (ich habe einen Scan mit https://www.ssllabs.com durchgeführt, die Ergebnisse sind unten), aber ich kann mir nicht sicher sein, da ich in diesem Bereich keine Kenntnisse habe :) Ich würde gerne verstehen, was los ist.

Eine Lösung/Erklärung wäre toll, Danke! 

Der Code:

import requests

requests.get('https://www.reporo.com/')

Ich erhalte den nächsten Fehler:

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
<ipython-input-7-cfc21b287fee> in <module>()
----> 1 requests.get('https://www.reporo.com/')

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in get(url, **kwargs)
     63 
     64     kwargs.setdefault('allow_redirects', True)
---> 65     return request('get', url, **kwargs)
     66 
     67 

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in request(method, url, **kwargs)
     47 
     48     session = sessions.Session()
---> 49     response = session.request(method=method, url=url, **kwargs)
     50     # By explicitly closing the session, we avoid leaving sockets open which
     51     # can trigger a ResourceWarning in some cases, and look like a memory leak

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    459         }
    460         send_kwargs.update(settings)
--> 461         resp = self.send(prep, **send_kwargs)
    462 
    463         return resp

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in send(self, request, **kwargs)
    571 
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574 
    575         # Total elapsed time of the request (approximately)

/usr/local/lib/python2.7/dist-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    429         except (_SSLError, _HTTPError) as e:
    430             if isinstance(e, _SSLError):
--> 431                 raise SSLError(e, request=request)
    432             Elif isinstance(e, ReadTimeoutError):
    433                 raise ReadTimeout(e, request=request)

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

Ich habe einen Scan unter https://www.ssllabs.com durchgeführt und Folgendes erhalten:

SSL Report: reporo.com
Assessed on:  Sun Feb 22 21:42:57 PST 2015 | Clear cache Scan Another >>

    Server  Domain(s)   Test time   Grade
1   154.51.128.13 
Certificate not valid for domain name 
reporo.com
Sun Feb 22 21:40:53 PST 2015 
Duration: 9.167 sec -
2   198.12.15.168 
protected.ddosdefend.com 
Ready 
www.reporo.com

Sun Feb 22 21:41:02 PST 2015 
Duration: 115.189 sec   
F
12

Das Zertifikat selbst für www.reporo.com (nicht reporo.com) ist gültig, es fehlt jedoch ein Kettenzertifikat, wie im Bericht von ssllabs gezeigt:

Chain issues    Incomplete
....
2   Extra download  Thawte DV SSL CA 
Fingerprint: 3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762 

Die Punkte "Incomplete" und "Extra Download" sind die Hauptpunkte. Bei einigen Browsern wird das fehlende Kettenzertifikat zwischengespeichert, bei anderen wird der Download durchgeführt, andere werden fehlschlagen. Wenn Sie die Site mit einem neuen Firefox-Profil (das keine Zertifikate zwischengespeichert hat) ausprobieren, schlägt dies ebenfalls fehl.

Sie können die fehlenden Kettenzertifikate herunterladen und als vertrauenswürdiges CA-Zertifikat mit dem Parameter verify für Anforderungen verwenden. Deaktivieren Sie nicht nur die Validierung, da Sie Angriffen mit Man-in-the-Middle-Attacken ausgesetzt sind.

Schritt für Schritt Anleitung:

20
Steffen Ullrich

Sie können die Zertifikatsüberprüfung deaktivieren:

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

aber ohne Zertifikatsüberprüfung gibt es keinen man-in-the-middle-Angriff Schutz.

4
Colin

Ich hatte den gleichen Fehler. Das Downgrade von Anfragen von Requests-2.17.3 auf Requests-2.11.0 hat es für mich gelöst. 

pip uninstall requests
pip install requests==2.11.0
2
Aleksei Denisov

Ich bin in ein ähnliches Problem geraten und habe folgendes behoben:

pip install -U requests[security]
1
Deqing