<p>Requests.Exceptions.SSLError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:645)</p>

Erstellt am 12. Feb. 2016  ·  77Kommentare  ·  Quelle: psf/requests

Hier ist die erste Ausgabe.
https://github.com/kennethreitz/requests/issues/2906

Python 3.5.1 (https://www.python.org/downloads/) Virtualenv 14.0.5 Mac OS X 10.11.3

Zuerst habe ich eine virtuelle Umgebung erstellt und pip install requests[security]

Dann habe ich

>>> from cryptography.hazmat.backends.openssl.backend import backend
>>> print(backend.openssl_version_text())
OpenSSL 1.0.2f  28 Jan 2016

was ich erwartet hatte.

Etwa eine Stunde lang hat alles super funktioniert.

Dann stürzten einige meiner eigenen Skripte ab, was normal war. Wenn ich danach versuche, mein Skript erneut auszuführen, habe ich folgende Ausnahmen erhalten

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Also habe ich eine andere Python-Konsole geöffnet und

>>> requests.get("https://www.google.com")
<Response [200]>
>>> requests.get("https://www.telegram.org")
Traceback (most recent call last):
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen
    body=body, headers=headers)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
    self._validate_conn(conn)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 784, in _validate_conn
    conn.connect()
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 252, in connect
    ssl_version=resolved_ssl_version)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 305, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 376, in send
    timeout=timeout
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 588, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 67, in get
    return request('get', url, params=params, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
>>> 

Also habe ich neu gestartet, alle diese Bibliotheken deinstalliert und sie erneut mit pip installiert. Alles hat wieder funktioniert.

Aber nach 1 Stunde oder so wieder die gleiche Ausnahme.

Hilfreichster Kommentar

@the-efi Hast du pyopenssl , pyasn1 und ndg-httpsclient installiert?

Alle 77 Kommentare

Dann stürzten einige meiner eigenen Skripte ab, was normal war.

Wie sieht so ein Crash aus?

Wenn ich danach versuche, mein Skript erneut auszuführen, habe ich folgende Ausnahmen erhalten

Können Sie sie danach überhaupt nicht mehr ausführen?

@sigmavirus24 Es ist nur ein Fehler in meinem eigenen Code, der nichts mit Netzwerken zu tun hat.
Ich bin mir nicht sicher, ob das der wahre Grund ist oder nur Zufall.

Aber eines ist sicher, irgendwann kann ich keine Anfrage an https://www.telegram.org stellen , was ich direkt nach der Installationsanfrage tun kann.

Nur zur Info: #2906

Daher möchte ich darauf hinweisen, dass Sie requests[security] installieren, was bedeutet, dass wir pyOpenSSL verwenden sollten, aber Ihr Stacktrace zeigt, dass dies nicht der Fall ist. Das ist faszinierend.

@sigmavirus24 Kann ich

Irgendeine Idee? @Lukasa

Was hier am wichtigsten ist, ist also: Warum verwendet Ihr Code PyOpenSSL nicht mehr? Können Sie bei einem Absturz eine Python-Konsole in Ihrer virtuellen Umgebung öffnen und dann import urllib3.contrib.pyopenssl ausführen, um zu sehen, ob das funktioniert?

Konnte es jetzt nicht reproduzieren. Ich werde dies zuerst schließen und wenn das Problem erneut auftritt, füge ich das Ergebnis ein und öffne es erneut.

@Lukasa Ich denke, da Anfragen mit einer eigenen urllib3 ausgeliefert werden, konnte ich urllib3 nicht alleine importieren. Und das folgende Ergebnis bestätigt es.

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'urllib3'
>>> ^D




pip list
cffi (1.5.0)
cryptography (1.2.2)
idna (2.0)
ndg-httpsclient (0.4.0)
pip (8.0.2)
pyasn1 (0.1.9)
pycparser (2.14)
pyOpenSSL (0.15.1)
requests (2.9.1)
setuptools (20.0)
six (1.10.0)
wheel (0.26.0)

Es tut mir leid, versuchen Sie es mit dem Importieren von requests.packages.urllib3.contrib.pyopenssl

@Lukasa

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests.packages.urllib3.contrib.pyopenssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 57, in <module>
    from socket import _fileobject, timeout, error as SocketError
ImportError: cannot import name '_fileobject'
>>> 

Ich wette, das ist ein Fehler in 3.5 mit pyOpenSSL, den wir über @lukasa nicht wussten (in Bezug auf _fileobject nicht vorhanden.

Nein, ich weiß davon und habe einen Upstream-Fix in urllib3 vorgeschlagen, als wir mit dem Testen von PyOpenSSL begannen. Die Realität ist, dass requests[security] mit Python 3 nicht funktioniert (und noch nie funktioniert hat). Das wird in einer kommenden Version von Requests behoben.

Das löst also unser Rätsel nicht: Warum hat das eine Weile funktioniert und dann aufgehört?

Tangentialer Kommentar, der auf dem ursprünglichen Bericht basiert, hat die in Python integrierte ssl.py eine Option zum Unterdrücken von zerlumpten EOFs, da es viele Websites gibt, die SSL-Verbindungen unsauber herunterfahren. manchmal unzuverlässig, als ob es eine Frage des Timings oder des Zufalls wäre. das Folgende ist ein Auszug aus ssl.py

class SSLSocket(socket):
    [...]
    def read(self, len=0, buffer=None):
        """Read up to LEN bytes and return them.
        Return zero-length string on EOF."""

        self._checkClosed()
        if not self._sslobj:
            raise ValueError("Read on closed or unwrapped SSL socket.")
        try:
            return self._sslobj.read(len, buffer)
        except SSLError as x:
            if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs:
                if buffer is not None:
                    return 0
                else:
                    return b''
            else:
                raise

Dieselbe Ausnahme bei Python 2.7.11/OSX beim Schlagen eines Servers mit requests unter gevent . Könnte das zusammenhängen?

@the-efi könnten Sie genauer angeben, welche Ausnahme Sie sehen?

    r = requests.post(self.MY_URL, data=parameters)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 109, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
SSLError: EOF occurred in violation of protocol (_ssl.c:590)

@the-efi Hast du pyopenssl , pyasn1 und ndg-httpsclient installiert?

pyopenssl: negativ
pyasn1: pyasn1==0.1.8 (vorübergehend, denke ich)
ndg-httpsclient: negativ

Okay. Sie verwenden auch Python 2.7, also scheinen Sie und das Poster unterschiedliche Probleme zu haben.

Wissen Sie, ob Ihr Problem beim Verbindungsaufbau oder bei einer Verbindung mit langer Laufzeit aufgetreten ist?

Ich könnte mir vorstellen, dass dies während des Verbindungsaufbaus geschieht, aber wenn requests zuvor geöffnete Verbindungen mit Connection: keep-alive wiederverwendet, könnte ich mich irren.

Requests verwendet tatsächlich nach Möglichkeit zuvor geöffnete Verbindungen wieder, weshalb ich die Frage gestellt habe. ;)

Es wäre sehr nützlich, wenn wir in Ihrem Fall eine Paketerfassung dieses Problems erhalten könnten, obwohl dies schwierig sein kann, da es unter hoher Last auftritt.

Kein Problem, ich werde nach dem Wochenende sehen, was ich dagegen tun kann. Soll ich das als neue Ausgabe einreichen?

Ja bitte. =)

@Lukasa Irgendwelche Fortschritte mit urllib3?

@caizixian Wir kommen dahin, aber wir haben einige Probleme mit unseren CI-Tests, weil Travis CI ein ziemlich altes PyPy-Image hat, das sich derzeit nicht gut mit PyOpenSSL verhält. Ich werde sehen, ob ich das irgendwann am Wochenende zum Laufen bekomme.

@Lukasa @shazow urllib3 hat auf Wunsch immer ein Zuhause unter http://ci.kennethreitz.org !

Irgendein Update zu diesem? Es passiert ziemlich oft, wenn man mit aws arbeitet.

@mindw Soweit ich weiß, wissen wir nicht genau, wo und wann es passiert. Im obigen Backtrace passiert es während des Handshakes, was normalerweise ein Problem bei der Verhandlung ist: Wann tritt dieser Fehler auf?

OS X, Python 3.5.1, fordert 2.10.0 + Sicherheit an.
Ich werde versuchen, zusätzliche Informationen auf Anfrage bereitzustellen :)

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
    chunked=chunked)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 351, in _make_request
    self._validate_conn(conn)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 814, in _validate_conn
    conn.connect()
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 289, in connect
    ssl_version=resolved_ssl_version)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 308, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 403, in send
    timeout=timeout
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 604, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/bin/splatt", line 9, in <module>
    load_entry_point('splatt', 'console_scripts', 'splatt')()
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/gabdav01/work/paas/splatt/splatt/cmd.py", line 108, in create
    url, json=json, headers=headers)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 518, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 477, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Dies deutet stark auf ein Fehlen von SNI oder keine Verschlüsselungsüberlappung hin. Können Sie die Kryptografie-Befehlszeile im OP ausdrucken und mir sagen, was sie sagt?

wie würde ich das machen?

@mindw Schauen Sie sich OP (den ursprünglichen Beitrag) an, wo @caizixian das Backend von cryptography importiert und die OpenSSL-Version druckt.

Bekomme auch dieses Problem. Welche Informationen kann ich zur Verfügung stellen, um bei der Lösung zu helfen?

@LukeNZ Viele Dinge. Python-Version, installierte Pakete, Anforderungsversion, OpenSSL-Version, Betriebssystem und die Website, die Sie kontaktieren möchten.

Hallo, ich habe gerade angefangen, Requests zu verwenden, und ich erhalte das gleiche auch. Ich verwende OS X 10.11.5, Python 3.5.1 in einer virtuellen Umgebung, neueste Version der Anforderungen. Das Ausführen der open_ssl-Version wie im OP gibt mir

OpenSSL 1.0.2h 3. Mai 2016

Ich versuche, eine Verbindung zu https://api.marketcircle.net/v1/ herzustellen .

Es sieht so aus, als ob Requests das einzige Spiel in der Stadt ist, ohne einen Haufen Code zu schreiben - Unirest installiert sich nicht mehr für Python 3, also Junge, ich hoffe, das wird bald herausgefunden.

@eoco Ok, das ist interessant. Ich kann dies unter OS X 10.11.6 Beta, Python 3.5.1 mit Requests 2.10.0 nicht reproduzieren. Tritt das Problem regelmäßig oder zeitweise auf?

Konsequent - ich konnte mich noch nicht erfolgreich verbinden.

Meine Tracebacks sind ziemlich nah an mindws oben, werden hier unten gepostet. Aber nur zu Ihrer Information habe ich Anfragen für Python 2.7 installiert, um dies ebenfalls zu testen, und erhielt eine SNMissingWarning: Obwohl die gleiche Warnung sagte, dass es möglicherweise damit zu tun hat, dass es sich um eine ältere Version von Python handelt, bin ich mir jedoch nicht sicher, ob dies der Fall ist Fall. Egal, auch kein Verbindungsglück.

SNIMissingWarning /Library/Python/2.7/site-packages/requests-2.10.0-py2.7.egg/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

Ich bin auch zurückgegangen und habe Unirest in Python 2.7 installiert und einen weiteren EOF-Fehler erhalten, aber dieses Mal in urllib2:

urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

Das hat also vielleicht überhaupt nichts mit Requests.py zu tun, aber um ehrlich zu sein, weiß ich nicht, wohin ich von hier aus gehen soll, außer Python nicht zu verwenden. Hier ist der Traceback von Anfragen/Python 3.5.1:
`
Importanfragen
URL = ' https://api.marketcircle.net/v1/ '
r = request.get(url) # keine Autorisierungs-Header hinzufügen, nur auf Verbindung prüfen

Traceback (letzter Anruf zuletzt):
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 578, in urlopen
stückig = stückig)
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 351 in _make_request
self._validate_conn(conn)
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 814, in _validate_conn
conn.connect()
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", Zeile 289, in connect
ssl_version=aufgelöste_ssl_version)
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", Zeile 308, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 376, in wrap_socket
_context=selbst)
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 747, in __init__
self.do_handshake()
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 983, in do_handshake
self._sslobj.do_handshake()
Datei "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", Zeile 628, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:645)

Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:

Traceback (letzter Anruf zuletzt):
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", Zeile 403, in send
Zeitüberschreitung = Zeitüberschreitung
Datei "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", Zeile 604, in urlopen
SSLError(e) auslösen
request.packages.urllib3.Exceptions.SSLError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:645)
`
Also, ich entschuldige mich, wenn dies nicht hilfreich ist. Dankeschön!

Können Sie das bitte ausführen und mir die Ausgabe zeigen? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Das ist also das Ergebnis: (Andere Version als der Befehlslauf im OP)

OpenSSL 0.9.8zh 14. Januar 2016

Dankeschön!

@eoco Ok, cool.

Das Problem hier ist also, dass Ihr Python 3 mit dem System OpenSSL verbunden ist, das uralt ist. Was ist in Ihrer Pip-Umgebung? Können Sie python3 -m pip freeze für mich laufen lassen?

Da ist nicht viel..

Mozaica-iMac:~ eoc$ python3 -m pip einfrieren

py3minepi==0.0.1
requests==2.10.0
You are using pip version 8.1.1, however version 8.1.2 is available.

Vielen Dank, dass Sie in dieser Hinsicht alles getan haben. Es ist offensichtlich kein Problem mit Anfragen, daher weiß ich Ihre Zeit wirklich zu schätzen.

Ok, der einfachste Weg für Sie, dies zu beheben, ist python3 -m pip install pyopenssl pyasn1 ndg-httpsclient auszuführen. Das sollte Ihr Problem beheben, aber wenn dies nicht der Fall ist, können wir aggressivere Optionen verfolgen.

Hmm. Danach immer noch der gleiche Fehler-

python3.5 -m pip einfrieren

cffi==1.6.0
cryptography==1.4
idna==2.1
ndg-httpsclient==0.4.1
py3minepi==0.0.1
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==16.0.0
requests==2.10.0
six==1.10.0

@eoco Hrm. Können Sie das für mich ausführen? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" und sagen Sie mir, was das ausgibt? Führen Sie auch python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

Whoa, das weist sicherlich auf das Problem hin. Beim ersten Lauf habe ich folgenden Traceback erhalten:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 63, in <module>
    from urllib3.packages.backports.makefile import backport_makefile
ImportError: No module named 'urllib3'

Ist urllib nicht Teil der Standardbibliothek? Auf jeden Fall habe ich pip urllib installiert und jetzt bin ich einsatzbereit.

Ich kann Ihnen nicht sagen, wie sehr ich Ihre Hilfe dabei schätze, Sie haben weit darüber hinaus getan. Ich frage mich, ob es ein Problem mit dem Python 3.5-Download für Mac auf python.org gibt. Dies war so ziemlich eine saubere Installation für dieses Projekt. Auf jeden Fall hilft dies vielleicht jemand anderem, wenn er auf so etwas stößt.

Nochmals vielen Dank!

Ah, das sieht nach einem richtigen Request-Bug aus. Urllib3 hat einen nicht-relativen Import in seiner Codebasis, der bricht, wenn wir es verkaufen! Wir sollten versuchen, das zu beheben.

@eoco Während wir also diesen Fix durch die Pipeline ausführen (siehe shazow/urllib3#901), besteht Ihre einfachste Lösung darin, Python 3 mit etwas wie Homebrew zu installieren. Dadurch wird Ihr Python 3 mit einem viel neueren OpenSSL verknüpft, das dieses Problem sowohl in Anfragen als auch in jeder anderen Anwendung, die die TLS-Bindungen des Systems verwendet, für Sie löst.

Ich habs. Die Installation von urllib3 scheint mein Problem gelöst zu haben, aber ich kann das einfach tun. Entschuldigung für eventuelle Verwirrungen, die dadurch entstanden sein könnten.

Dankeschön!

Ich bin auf den gleichen Fehler gestoßen, NACHDEM ich zu aws gewechselt und die App hinter einen elastischen Loadbalancer gestellt habe, der noch nie zuvor aufgetreten ist.

Ich habe auch urllib3 installiert.

Gibt es Hoffnung für die Installation von pyopenssl? Ich habe es versucht und es gab viele C-Level-Fehler (die möglicherweise auf fehlende Teile in meinem Docker-Image zurückzuführen sind).

[2016-06-29 02:27:59,932: CRITICAL/MainProcess] Task ventures.tasks.cache_warmup[ae2c97eb-3b28-4896-8d0f-42f712115707] INTERNAL ERROR: SSLError(SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:645)'),),)
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 253, in trace_task
    I, R, state, retval = on_error(task_request, exc, uuid)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 201, in on_error
    R = I.handle_error_state(task, eager=eager)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 85, in handle_error_state
    }[self.state](task, store_errors=store_errors)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 125, in handle_failure
    einfo=einfo)
  File "/usr/local/lib/python3.5/dist-packages/celery/utils/dispatch/signal.py", line 166, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/srv/core/celery.py", line 31, in notify_task_failure
    """.format(sender, exception, args, kwargs))
  File "/usr/lib/python3.5/logging/__init__.py", line 1308, in error
    self._log(ERROR, msg, args, **kwargs)
  File "/usr/lib/python3.5/logging/__init__.py", line 1415, in _log
    self.handle(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 1425, in handle
    self.callHandlers(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 1487, in callHandlers
    hdlr.handle(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 855, in handle
    self.emit(record)
  File "/srv/core/management/logger/slack.py", line 28, in emit
    notify_slack(message, channel)
  File "/usr/local/lib/python3.5/dist-packages/celery/local.py", line 188, in __call__
    return self._get_current_object()(*a, **kw)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 439, in __protected_call__
    return orig(self, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py", line 420, in __call__
    return self.run(*args, **kwargs)
  File "/srv/core/tasks.py", line 66, in notify_slack
    data=json.dumps(payload), headers={'Content-Type': 'application/json'}
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 107, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
pip freeze:

amqp==1.4.9
analytics-python==1.1.0
anyjson==0.3.3
beautifulsoup4==4.4.1
billiard==3.3.0.23
bleach==1.4.2
boto==2.39.0
celery==3.1.23
Django==1.8.13
django-appconf==1.0.2
django-compressor==2.0
django-countries==3.4.1
django-filter==0.13.0
django-haystack==2.5.dev0
django-htmlmin==0.9.0
django-modelcluster==1.1
django-overextends==0.4.1
django-redis==4.3.0
django-rest-swagger==0.3.5
django-storages-redux==1.3.2
django-taggit==0.18.3
django-treebeard==4.0.1
djangorestframework==3.3.3
docopt==0.4.0
docutils==0.12
drf-extensions==0.2.8
dropbox==4.0
elasticsearch==1.8.0
et-xmlfile==1.0.1
geopy==1.11.0
google-api-python-client==1.5.0
gunicorn==19.4.5
hiredis==0.2.0
html5lib==0.9999999
httplib2==0.9.2
jdcal==1.2
jsonfield==1.0.3
kombu==3.0.35
mandrill==1.0.57
Markdown==2.6.5
mock==1.0.1
numpy==1.11.0
oauth2client==2.2.0
openpyxl==2.3.4
Pillow==3.1.1
psycopg2==2.6.1
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycurl==7.43.0
pygobject==3.20.0
PyMySQL==0.7.2
python-apt==1.1.0b1
python-dateutil==2.5.3
pytz==2016.4
PyYAML==3.11
rcssmin==1.0.6
redis==2.10.5
requests==2.9.1
rjsmin==1.0.12
rsa==3.4.2
simplejson==3.8.2
six==1.10.0
sphinx-me==0.3
unattended-upgrades==0.1
Unidecode==0.4.19
uritemplate==0.6
urllib3==1.16
wagtail==1.4.5
Willow==0.3.1
python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 49, in <module>
    from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
ImportError: No module named 'ndg'

@shredding Versuchen Sie, pyopenssl, ndg-httpsclient und pyasn1 zu installieren. Sie brauchen jetzt alle drei.

Okay, ich werde es versuchen (ich kann das nur auf aws reproduzieren und berichten).

Für diejenigen, die Python3 innerhalb eines ubuntu:latest Pakets auf Docker ausführen, müssen Sie Folgendes hinzufügen:

RUN apt-get install build-essentials python-dev libffi

vor dem Hinzufügen

pyOpenSSL==16.0.0
ndg-httpsclient==0.4.1
pyasn1==0.1.9

... nach Ihren Anforderungen.txt

Habe das gleiche Problem hier.
Behoben durch die Installation von pyopenssl, ndg-httpsclient, pyasn1 und natürlich urllib3.

Auch auf meiner Seite trete ich nicht wieder auf.

Ich habe versucht, mich mit der Twitter-API zu verbinden, also habe ich zuerst die folgende Fehlermeldung erhalten
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Ich habe Monkey Patch verwendet und aber Letter Money Patch hat nicht funktioniert, ich habe pyOpenSSL ,ndg-httpsclient, pyasn1 installiert und irgendwie hat das funktioniert.
Aber danach habe ich das bekommen
Traceback (most recent call last): File "twitter_friend.py", line 32, in <module> stream.statuses.filter(follow='sajjkum') File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter self.streamer._request(url, 'POST', params=params) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request response = _send(retry_counter) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send response = func(url, **requests_args) File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post return self.request('POST', url, data=data, json=json, **kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:\Python27\lib\site-packages\requests\adapters.py", line 426, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))

und das
Traceback (most recent call last): File "twitter_friend.py", line 32, in <module> stream.statuses.filter(follow='sajjkum') File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter self.streamer._request(url, 'POST', params=params) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request response = _send(retry_counter) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send response = func(url, **requests_args) File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post return self.request('POST', url, data=data, json=json, **kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:\Python27\lib\site-packages\requests\adapters.py", line 447, in send raise SSLError(e, request=request) requests.exceptions.SSLError: bad handshake: SysCallError(-1, 'Unexpected EOF')

Ich verwende Python 2.7 , urllib3 (1.4), Anfragen (2.9.1).

Beide Fehler deuten darauf hin, dass der Remoteserver Ihre Anfrage nicht akzeptiert. Es ist uns jedoch nicht wirklich möglich, diesen Fehler zu diagnostizieren. Ich empfehle Ihnen, Ihr OpenSSL zu aktualisieren und es erneut zu versuchen.

pip install --force-reinstall requests[security] es für mich gelöst.

Ich erhalte die gleiche Ausnahme, nachdem ich jede oben erwähnte Lösung ausprobiert habe. Fehler-Trace:
Datei "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", Zeile 488, in request
resp = self.send(prep, *send_kwargs)Datei "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", Zeile 609, in sendr = adapter.send(Anfrage, * kwargs)
Datei "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", Zeile 497, in send
SSLError auslösen (e, request=request)
Requests.Exceptions.SSLError: ("schlechter Handshake: SysCallError(-1, 'Unexpected EOF')",)

Informationen zum Systempaket:
cffi==1.9.1
Kryptographie==1.6
idna==2.1
ndg-httpsclient==0.4.2
pkg-Ressourcen==0.0.0
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
Anfragen==2.12.3
sechs==1.10.0

Python: Python 3.5.2 (Standard, 5. Juli 2016, 12:43:10)
Betriebssystem: Ubuntu 16.04
OpenSSL 1.0.2g 1. März 2016

Schätzen Sie Ihre Hilfe in dieser Angelegenheit.

Dies bedeutet mit ziemlicher Sicherheit, dass die der Gegenstelle angebotenen Verschlüsselungen nicht akzeptabel sind. Wenn Sie openssl s_client -connect <host>:<port> für die Website verwenden, die Sie kontaktieren möchten, können Sie mir die Ausgabe mitteilen? (Bitte stellen Sie sicher, dass Sie dies mit dem von Ihnen verwendeten OpenSSL 1.0.2g tun).

@Lukasa Danke für deine schnelle Antwort. Die von Ihnen angeforderte Ausgabe lautet wie folgt:

Außerdem füge ich die Antwort von OpenSSL 1.0.1f vom 6. Januar 2014 hinzu
An dieser Version scheint es zu funktionieren.

@> openssl version
OpenSSL 1.0.2g  1 Mar 2016
@> openssl s_client -connect <host>:<port>
CONNECTED(00000003)
140401805448856:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
no peer certificate available
No client certificate CA names sent
SSL handshake has read 0 bytes and written 305 bytes
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480703355
    Timeout   : 300 (sec)

Ich habe es auch mit einer früheren Version von openssl versucht und es scheint zu funktionieren:

@> openssl version
OpenSSL 1.0.1f 6 Jan 2014
@> openssl s_client -connect <server>:<host>
CONNECTED(00000003)
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=27:certificate not trusted
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=21:unable to verify the first certificate
verify return:1
Certificate chain
 0 s:/C=US/ST=California/O=Internet Widgits Pty Ltd
   i:/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=John Smith
Server certificate
BEGIN CERTIFICATE
<certificate>
END CERTIFICATE
subject=/C=US/ST=California/O=Internet Widgits Pty Ltd
issuer=/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=<Name>

No client certificate CA names sent
SSL handshake has read 2120 bytes and written 477 bytes

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-SHA384
    Session-ID: C7AEA448B9E21C30D90D1377904426A9D1A21971785D547378CA07ACDAC00161
    Session-ID-ctx: 
    Master-Key: C5B31E9D7A59EF4E6A2657E9F55A64B89F4AE3BBDFD864ADD1087449AA927D9C1655A76E44C3E30FF2301DB00C1CB2F7
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480703425
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)

Es sieht also so aus, als hätte Ihr Server einen ziemlich heftigen Einwand gegen etwas in Ihrem OpenSSL 1.0.2-Handshake. Kennen Sie tcpdump oder Wireshark? Wenn ja, wäre es wirklich hilfreich, wenn Sie eine Paketerfassung der beiden Handshakes machen und mir diese zur Verfügung stellen könnten.

Gleiches Problem hier mit www.celestrak.com

pip freeze --local

[...] Omitting other packages
cffi==1.9.1
cryptography==1.7.1
idna==2.2
ipaddress==1.0.17
ndg-httpsclient==0.4.2
numpy==1.11.3
pyasn1==0.1.9
pyOpenSSL==16.2.0
requests==2.12.4
scandir==1.4

openssl s_client -connect www.celestrak.com:443

CONNECTED(00000003)
140736264172552:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 308 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1483987800
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

openssl version

OpenSSL 1.0.2j  26 Sep 2016

Ich verwende das Update (die vor arbeiten) vorgeschlagen hier .

class CustomAdapter(requests.adapters.HTTPAdapter):
    ''' See: http://stackoverflow.com/a/14146031/1334711 '''
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = requests.packages.urllib3.poolmanager.PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_version=ssl.PROTOCOL_TLSv1)

# Other code

        if url_parse.scheme in ('http', 'https'):
            # It's a URL, get from Internet
            try:
                tle_file = requests.get(source).text

            except requests.exceptions.SSLError:
                pytest.set_trace()
                s = requests.Session()
                s.mount('https://', CustomAdapter())
                tle_file = s.get(source).text

Python v.2.7.13
Betriebssystem: macOS 10.12.2

Der Fehler, den ich erhalte, ist:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

@rubendibattista www.celestrack.com hat eine schreckliche TLS-Konfiguration, wie Sie hier sehen können . Dies bedeutet, dass moderne Versionen von Requests keine der vom Server verwendeten Verschlüsselungssammlungen unterstützen, da sie alle schwach und defekt sind.

Zunächst empfehle ich, diesen Server überhaupt nicht zu kontaktieren. Wenn das nicht möglich ist, können Sie den Standard Chiffriersätze ändern , indem etwas zu tun , wie diese .

@Lukasa Danke für deine Unterstützung. Ich habe den Administrator der Site kontaktiert, um zu berichten, was Sie sagen, und zu versuchen, eine bessere Lösung zu finden, als die von Ihnen vorgeschlagene Problemumgehung zu verwenden.

Hallo Leute! Habe diese Fehler auch. Die Verwendung von Python3 und die Installation der Combo (pyopenssl ndg-httpsclient pyasn1 urllib3) hat den Zweck erfüllt. Aber ich werde neugierig, wie sich Python2.7 unter OS X und Ubuntu verhalten hat:

Szenario 001

  • Python: 2.7
  • Anfragen: 2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3: Nicht installiert
  • virtuelle Umgebung: 1.11.6
  • Betriebssystem: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14. Januar 2016

Fehler

Traceback (most recent call last):
  File "loanpro_doc_uploader.py", line 113, in <module>
    run()
  File "loanpro_doc_uploader.py", line 109, in run
    loanpro = LoanPro(args.env, args.folder)
  File "loanpro_doc_uploader.py", line 36, in __init__
    self.get_all_customforms_data()
  File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
    resp = requests.get(url, headers=headers)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 456, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 559, in send
    r = adapter.send(request, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/adapters.py", line 382, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)

Szenario 002

  • Python: 3.4
  • Anfragen: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: Nicht installiert
  • virtuelle Umgebung: 1.11.6
  • Betriebssystem: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14. Januar 2016

Fehler

Traceback (most recent call last):
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
    self._validate_conn(conn)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
    conn.connect()
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connection.py", line 323, in connect
    ssl_context=context)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 365, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 583, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 810, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 624, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "loanpro_doc_uploader.py", line 113, in <module>
    run()
  File "loanpro_doc_uploader.py", line 109, in run
    loanpro = LoanPro(args.env, args.folder)
  File "loanpro_doc_uploader.py", line 36, in __init__
    self.get_all_customforms_data()
  File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
    resp = requests.get(url, headers=headers)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)

Szenario 004

  • Python: 2.7
  • Anfragen: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: Nicht installiert
  • Betriebssystem: Ubuntu 14.4 (angedockt)
  • OpenSSL: nicht installiert

Fehler ist weg

Szenario 003

  • Python: 3.4
  • Anfragen: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: Installiert
  • virtuelle Umgebung: 1.11.6
  • Betriebssystem: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14. Januar 2016

Fehler ist weg

Der Fehler ist unklar, liegt aber höchstwahrscheinlich an Ihrer OpenSSL-Version. Ihre Behauptung, dass Ubuntu 14.04 kein OpenSSL hat, kann einfach

Hallo!

Ich habe ein Problem mit einigen https-Sites und einer Anfragebibliothek.
Website: https://ndmc.gov.in/vacancy.aspx

Eingerichtet:
appdirs==1.4.0
cffi==1.9.1
Kryptographie==1.7.2
idna==2.2
ndg-httpsclient==0.4.2
Verpackung==16.8
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
pyparsing==2.1.10
Anfragen==2.13.0
sechs==1.10.0
urllib3==1.20
OpenSSL 1.0.2k 26. Januar 2017

bekomme einen Fehler: request.exceptions.SSLError: ("schlechter Handshake: SysCallError(-1, 'Unexpected EOF')",)

Betriebssystem: Archbang Linux, neuestes
Python 3.6 & Python 2.7 - gleicher Fehler

Sie sind eine weitere Person, die unseren Wettbewerb gewinnt, wer versuchen kann, den schlechtesten HTTPS-Server der Welt zu kontaktieren . Dieser Server ist schrecklich konfiguriert, er ist völlig unsicher. Der Grund , warum dieses Problem bei Ihnen zu begegnen ist , weil Anfragen nicht mehr unterstützt keines des Chiffriersätze Dieses Server unterstützt , weil sie alle entweder schwach oder unsicher sind. Zunächst empfehle ich Ihnen, jemanden unter Druck zu setzen, den Server zu reparieren, aber wenn Sie ihn wirklich kontaktieren müssen, können Sie 3DES wie folgt erneut hinzufügen.

@vyscond hat mir das Leben gerettet. Egal was ich auf meinem OSX gemacht habe, es verschwand erst bei der Installation von pyopenssl ndg-httpsclient pyasn1 urllib3 . Vielleicht sollte es als Abhängigkeiten für die OSX-Installation von requests hinzugefügt werden?

Es ist nur bei einigen Konfigurationen von OS X und Python nützlich. Das Endergebnis ist, dass sie optional bleiben.

Ich frage mich, wie viel Zeit die Leute verbringen, bevor sie (vielleicht) die Lösung für dieses Problem finden. Ich musste viel durcharbeiten, um diesen Thread zu finden und durchzugehen. Lohnt es sich?

Kommt darauf an. Es können Probleme entstehen, wenn auch diese Abhängigkeiten erforderlich sind, nicht zuletzt, weil es Ihrem System ein neues OpenSSL hinzufügt, das separat versioniert und verwaltet wird.

@Lukasa aus irgendeinem Grund habe ich mein Setup zum Laufen gebracht, scheint pyopenssl (installiert über Requests[security] die an einige Anfragen angehängten Zertifikate durcheinander zu bringen.
Ich musste das Paket pyopenssl deinstallieren, um Anfragen zur Verwendung von OpenSSL in urllib3 zu erzwingen.
Dies geschieht bei der Verwendung von adal (https://github.com/AzureAD/azure-activedirectory-library-for-python), was bei einigen alten Versionen von Anforderungen (die die Zertifikate unterstützen) grundsätzlich nicht funktioniert.
Kommt mir aber ein bisschen nach Voodoo vor.

Ich hatte dieses Problem unter Mac OSX Sierra v 10.12.0. Habe alles in diesem Thread versucht, hat nicht funktioniert. Schließlich habe ich mein Betriebssystem auf v10.12.6 aktualisiert und das Problem war verschwunden.

Der Fehler kann auch auftreten, wenn Python-Requests verwendet werden, um einen API-Aufruf an eine Site zu tätigen, die sich hinter einem VPN befindet, und dieser VPN-Tunnel ist in diesem Moment nicht verfügbar.

Hallo Leute!

Ich bin selbst ein bisschen neu in Bezug auf Anfragen und habe diesen Fehler beim Ausführen eines POC mit Anfragen festgestellt, um zu sehen, ob es meine Anforderungen an die Einhaltung der allgemeinen Kriterien erfüllen kann. Ich habe versucht, meinen Requests-POC mit diesem Tool zu verbinden. Ich schaue mir speziell die Testfälle für FIA-X509 Ext 1.1 an, aber das habe ich erhalten:

Traceback (letzter Anruf zuletzt):
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 601, in urlopen
stückig = stückig)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 346, in _make_request
self._validate_conn(conn)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 850, in _validate_conn
conn.connect()
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", Zeile 326, in connect
ssl_context=Kontext)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", Zeile 329, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Datei "/usr/lib/python3.6/ssl.py", Zeile 407, in wrap_socket
_context=selbst, _session=session)
Datei "/usr/lib/python3.6/ssl.py", Zeile 814, in __init__
self.do_handshake()
Datei "/usr/lib/python3.6/ssl.py", Zeile 1068, in do_handshake
self._sslobj.do_handshake()
Datei "/usr/lib/python3.6/ssl.py", Zeile 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF ist unter Verletzung des Protokolls aufgetreten (_ssl.c:777)

Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:

Traceback (letzter Anruf zuletzt):
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", Zeile 440, in send
Zeitüberschreitung = Zeitüberschreitung
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", Zeile 639, in urlopen
_stacktrace=sys.exc_info()[2])
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", Zeile 388, inkrementell
raise MaxRetryError(_pool, url, error oder ResponseError(cause))
urllib3.Exceptions.MaxRetryError: HTTPSConnectionPool(host='10.0.0.221', port=443): Max. Wiederholungen überschritten mit URL: / (Caused by SSLError(SSLEOFError(8, 'EOF trat unter Verletzung des Protokolls auf (_ssl.c:777 )'),))

Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:

Traceback (letzter Anruf zuletzt):
Datei "req.py", Zeile 91, in
r = session.request('GET', 'https://10.0.0.221', verify=True)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", Zeile 508, in Anfrage
resp = self.send(prep, *send_kwargs)Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", Zeile 618, in sendr = adapter.send(Anfrage, * kwargs)
Datei "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", Zeile 506, in send
SSLError auslösen (e, request=request)
Requests.Exceptions.SSLError: HTTPSConnectionPool(host='10.0.0.221', port=443): Max. Wiederholungen überschritten mit URL: / (Caused by SSLError(SSLEOFError(8, 'EOF trat unter Verletzung des Protokolls auf (_ssl.c:777 )'),))

Dies ist der POC-Code, den ich verwende:

import ssl
import requests

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_

CIPHERS = (
    'RSA+AES'
)

class TlsAdapter(HTTPAdapter):
    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)

        self.poolmanager = PoolManager(*pool_args,
                                       ssl_context=ctx,
                                       **pool_kwargs)

session = requests.session()

adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://10.0.0.221', verify=True)
print(r)

wobei 10.0.0.221 der Ort ist, an dem ich das Tool zur Überprüfung platziert habe.

Ich bin mir nicht ganz sicher, warum dieser Fehler auftritt. Ich habe versucht, diesen Thread sowie mehrere andere Fragen zu Stackoverflow durchzugehen, konnte aber keine geeignete Lösung finden.

Ich gebe zu, dass ich zu diesem Zeitpunkt auch kein klares Verständnis des TLS-Protokolls habe. Also, wenn mir jemand helfen könnte, was hier das Problem ist, wäre ich dankbar.

Bitte lassen Sie mich wissen, wenn ich etwas übersehen habe oder zusätzliche Informationen benötigen. Vielen Dank!

Genau als FYI tritt dieser Fehler auch auf, wenn SSL auf dem Server, zu dem Sie eine Verbindung herstellen, nicht aktiviert ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Matt3o12 picture Matt3o12  ·  3Kommentare

mitar picture mitar  ·  4Kommentare

remram44 picture remram44  ·  4Kommentare

NoahCardoza picture NoahCardoza  ·  4Kommentare

eromoe picture eromoe  ·  3Kommentare