<p>request.exceptions.SSLError : EOF s'est produit en violation du protocole (_ssl.c:645)</p>

Créé le 12 févr. 2016  ·  77Commentaires  ·  Source: psf/requests

Voici le premier numéro.
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

Tout d'abord, j'ai créé un virtualenv et pip install requests[security]

Puis j'ai eu

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

c'est ce que j'attendais.

Tout a très bien fonctionné pendant environ une heure.

Ensuite, certains de mes propres scripts se sont écrasés, ce qui était normal. Après cela, lorsque j'essaie d'exécuter à nouveau mon script, j'ai les exceptions suivantes

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)

J'ai donc ouvert une autre console Python et

>>> 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)
>>> 

J'ai donc redémarré, désinstallé toutes ces bibliothèques et pip les réinstalle. Tout a de nouveau fonctionné.

Mais après environ 1 heure, même exception à nouveau.

Commentaire le plus utile

@the-efi Avez-vous pyopenssl , pyasn1 et ndg-httpsclient installés ?

Tous les 77 commentaires

Ensuite, certains de mes propres scripts se sont écrasés, ce qui était normal.

A quoi ressemble un crash comme ça ?

Après cela, lorsque j'essaie d'exécuter à nouveau mon script, j'ai les exceptions suivantes

Êtes-vous complètement incapable de les exécuter après cela?

@ sigmavirus24 C'est juste un bug dans mon propre code sans rien à voir avec le réseau.
Je ne sais pas si c'est la vraie cause ou juste une coïncidence.

Mais une chose est sûre, après un certain point, je suis complètement incapable de faire une demande à https://www.telegram.org , ce que je peux faire juste après la demande d'installation.

Juste pour info : #2906

J'aimerais donc souligner que vous installez requests[security] ce qui signifie que nous devrions utiliser pyOpenSSL mais votre stacktrace montre que ce n'est pas le cas. C'est intriguant.

@sigmavirus24 Alors, je peux faire quelque chose pour vous aider ?

Une idée? @Lukasa

Alors, ce qui compte le plus ici, c'est : pourquoi votre code cesse-t-il d'utiliser PyOpenSSL ? Lorsque vous rencontrez votre plantage, pouvez-vous ouvrir une console python dans votre environnement virtuel, puis exécuter import urllib3.contrib.pyopenssl , pour voir si cela fonctionne ?

Impossible de le reproduire maintenant. Je vais le fermer en premier, et si je rencontre à nouveau le problème, je collerai le résultat et le rouvrirai.

@Lukasa Je pense que puisque les demandes sont expédiées avec sa propre urllib3, je ne pouvais pas importer urllib3 seule. Et le résultat suivant le confirme.

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)

Je suis désolé, essayez d'importer 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'
>>> 

Je parie que c'est un bug sur 3.5 avec pyOpenSSL que nous ne connaissions pas @lukasa (en ce qui concerne _fileobject n'existant pas.

Non, je le sais, et j'ai proposé un correctif en amont dans urllib3 lorsque nous avons commencé à tester PyOpenSSL. La réalité est que requests[security] ne fonctionne pas (et n'a jamais) fonctionné sur Python 3. Cela sera corrigé dans une prochaine version de Requests.

Cela ne résout donc pas notre énigme : pourquoi cela a-t-il fonctionné un moment puis s'est-il arrêté ?

commentaire tangent basé sur le rapport d'origine, le ssl.py intégré en python a une option pour supprimer les EOF irréguliers car il existe de nombreux sites qui arrêteront mal les connexions SSL. parfois de manière peu fiable comme s'il s'agissait d'une question de timing ou de coïncidence. ce qui suit est un extrait de 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

Avoir la même exception sur Python 2.7.11/OSX lors du pilonnage d'un serveur avec requests sous gevent . Cela pourrait-il être lié?

@the-efi pourriez-vous être plus précis sur l'exception que vous voyez ?

    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 Avez-vous pyopenssl , pyasn1 et ndg-httpsclient installés ?

pyopenssl : négatif
pyasn1 : pyasn1==0.1.8 (transitoire, je suppose)
ndg-httpsclient : négatif

D'accord. Vous utilisez également Python 2.7, donc vous et l'affiche semblez avoir des problèmes différents.

Savez-vous si vous rencontrez votre problème lors de la configuration de la connexion ou sur une connexion de longue durée ?

J'imagine que c'est lors de la configuration de la connexion, mais si requests réutilise les connexions précédemment ouvertes avec Connection: keep-alive je peux me tromper.

Requests réutilise en effet les connexions précédemment ouvertes dans la mesure du possible, c'est pourquoi j'ai posé la question. ;)

Ce serait très utile si nous pouvions obtenir une capture de paquet de ce problème dans votre cas, bien que cela puisse être délicat étant donné qu'il se produit sous une charge importante.

Pas de problème, je verrai ce que je peux faire après le week-end. Souhaitez-vous que je soumette cela comme un nouveau problème?

Oui s'il vous plaît. =)

@Lukasa Des progrès avec urllib3 ?

@caizixian Nous y arrivons, mais nous avons quelques problèmes avec nos tests CI car Travis CI a une image PyPy assez ancienne qui ne se comporte pas bien avec PyOpenSSL pour le moment. Je vais voir si je peux faire fonctionner ça ce week-end.

@Lukasa @shazow urllib3 a toujours une maison sur http://ci.kennethreitz.org , si vous le souhaitez !

Une mise à jour sur celui-ci? Cela arrive souvent lorsque vous travaillez avec aws.

@mindw Autant que je sache, nous ne comprenons pas exactement où et quand cela se produit. Dans le backtrace ci-dessus, cela se produit pendant la poignée de main, ce qui est généralement un problème de négociation : quand rencontrez-vous cette erreur ?

OS X, Python 3.5.1, demandes 2.10.0 + sécurité.
Je vais essayer de fournir toute information supplémentaire sur demande :)

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)

Cela suggère fortement un manque de SNI ou pas de chevauchement de chiffrement. Pouvez-vous imprimer la ligne de commande de cryptographie dans l'OP et me dire ce qu'elle dit?

comment je ferais ça ?

@mindw Regardez OP (le message d'origine) où @caizixian importe le backend de cryptography et imprime la version OpenSSL.

Obtenir également ce problème. Quelles informations puis-je fournir pour aider à résoudre?

@LukeNZ Beaucoup de choses. Version Python, packages installés, version des requêtes, version OpenSSL, système d'exploitation et site Web que vous essayez de contacter.

Bonjour, je viens de commencer à utiliser Requests et j'obtiens également la même chose. Je suis sur OS X 10.11.5, Python 3.5.1 dans un environnement virtuel, la dernière version des requêtes. Exécuter la version open_ssl comme dans l'OP me donne

OpenSSL 1.0.2h 3 mai 2016

J'essaie de me connecter à https://api.marketcircle.net/v1/ .

Il semble que Requests soit le seul jeu en ville sans écrire un tas de code - Unirest ne s'installe plus pour Python 3, alors j'espère que cela sera bientôt compris.

@eoco Ok, c'est intéressant. Je ne peux pas reproduire cela sur OS X 10.11.6 Beta, Python 3.5.1 avec Requests 2.10.0. Rencontrez-vous le problème régulièrement ou par intermittence ?

Constamment - Je n'ai pas encore réussi à me connecter.

Mes retraçages sont assez proches de ceux de mindw ci-dessus, je les publierai en bas ici. Mais tout comme pour info, j'ai installé des requêtes pour Python 2.7 pour tester cela aussi et j'ai obtenu un SNIMissingWarning : bien que le même avertissement indique qu'il peut s'agir d'une ancienne version de Python, mais je ne sais pas si c'est le Cas. Quoi qu'il en soit, pas de chance de connexion là non plus.

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.

Je suis également revenu en arrière et j'ai installé Unirest dans Python 2.7 et j'ai obtenu une autre erreur EOF, mais cette fois dans urllib2 :

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

Donc, cela n'a peut-être rien à voir avec Requests.py, mais pour être honnête, je ne sais pas où aller, à part ne pas utiliser Python. Voici le retraçage des requêtes/Python 3.5.1 :
`
demandes d'importation
URL = ' https://api.marketcircle.net/v1/ '
r = request.get(url) # n'ajoutant aucun en-tête d'autorisation, vérifiant simplement la connexion

Traceback (appel le plus récent en dernier) :
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", ligne 578, dans urlopen
fragmenté = fragmenté)
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", ligne 351, dans _make_request
self._validate_conn(conn)
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", ligne 814, dans _validate_conn
conn.connect()
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", ligne 289, en connexion
ssl_version=résolu_ssl_version)
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", ligne 308, dans ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Fichier "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", ligne 376, dans wrap_socket
_context=soi)
Fichier "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", ligne 747, dans __init__
self.do_handshake()
Fichier "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", ligne 983, dans do_handshake
self._sslobj.do_handshake()
Fichier "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", ligne 628, dans do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError : EOF s'est produit en violation du protocole (_ssl.c:645)

Lors du traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (appel le plus récent en dernier) :
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", ligne 403, en envoi
délai d'attente = délai d'attente
Fichier "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", ligne 604, dans urlopen
lever SSLError(e)
request.packages.urllib3.exceptions.SSLError : EOF s'est produit en violation du protocole (_ssl.c:645)
`
Donc, mes excuses si cela ne vous aide pas. Merci!

Pouvez-vous s'il vous plaît exécuter ceci et me montrer la sortie? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Voici donc le résultat : (version différente de la commande exécutée dans OP)

OpenSSL 0.9.8zh 14 janv. 2016

Merci!

@eoco Ok, cool.

Donc le problème ici est que votre Python 3 est lié au système OpenSSL, qui est ancien. Qu'y a-t-il dans votre environnement pip ? Pouvez-vous exécuter python3 -m pip freeze pour moi ?

Pas trop là-bas..

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

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

Merci d'être allé au-delà de cela. Ce n'est évidemment pas un problème avec les demandes, donc j'apprécie vraiment votre temps.

Ok, donc le moyen le plus simple pour vous de résoudre ce problème est d'exécuter python3 -m pip install pyopenssl pyasn1 ndg-httpsclient . Cela devrait résoudre votre problème, mais si ce n'est pas le cas, nous pouvons rechercher des options plus agressives.

Hmm. Toujours la même erreur après-

python3.5 -m pip gel

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 . Pouvez-vous exécuter cela pour moi? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" et dites-moi ce que cela donne ? Exécutez également python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

Whoa, cela indique certainement le problème. Lors de la première utilisation, j'ai obtenu le suivi suivant :

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'

urllib ne fait-il pas partie de la bibliothèque standard ? Dans tous les cas, j'ai installé urllib et maintenant je suis opérationnel.

Je ne peux pas vous dire à quel point j'apprécie votre aide, vous êtes allé bien au-delà. Je me demande s'il y a un problème avec le téléchargement Python 3.5 pour Mac sur python.org ? C'était à peu près une installation propre pour ce projet. Dans tous les cas, cela aidera peut-être quelqu'un d'autre s'il rencontre quelque chose comme ça.

Encore une fois merci beaucoup!

Ah, cela ressemble à un bogue de requêtes approprié. Urllib3 a une importation non relative dans sa base de code qui se brise lorsque nous la vendons ! Nous devrions viser à corriger cela.

@eoco Donc, pendant que nous

J'ai compris. Le simple fait d'installer urllib3 semble avoir résolu mon problème, mais je peux le faire. Toutes nos excuses pour les confusions que cela a pu causer.

Merci!

Je suis tombé sur le même bogue APRÈS être passé à aws et avoir placé l'application derrière un équilibreur de charge élastique, cela ne s'était jamais produit auparavant.

J'ai également installé urllib3.

Y a-t-il un espoir d'installer pyopenssl ? J'ai essayé et il y avait beaucoup d'erreurs de niveau C (ce qui peut être la cause de certaines parties manquantes dans mon image docker).

[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 Essayez d'installer pyopenssl, ndg-httpsclient et pyasn1. Vous avez besoin des trois en ce moment.

D'accord, je vais essayer (je ne peux que reproduire cela sur aws et faire un rapport).

Pour ceux qui exécutent python3 dans un package ubuntu:latest sur docker, vous devez ajouter

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

avant d'ajouter

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

... à vos exigences.txt

J'ai le même problème ici.
Corrigé en installant pyopenssl, ndg-httpsclient, pyasn1 et urllib3 bien sûr.

Je ne reviens plus de mon côté également.

J'essayais de me connecter à l'API Twitter, donc au début, j'obtenais l'erreur ci-dessous
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

J'ai utilisé le patch de singe et mais le patch d'argent de lettre n'a pas fonctionné, j'ai installé pyOpenSSL, ndg-httpsclient, pyasn1 et d'une manière ou d'une autre, cela a fonctionné.
Mais après ça j'ai eu ça
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("''",))

et ça
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')

J'utilise python 2.7 , urllib3(1.4), request(2.9.1).

Ces deux erreurs suggèrent que le serveur distant n'accepte pas votre demande. Cependant, il ne nous est pas vraiment possible de diagnostiquer cette erreur. Je vous recommande de mettre à jour votre OpenSSL et de réessayer.

pip install --force-reinstall requests[security] résolu pour moi.

Je reçois la même exception après avoir essayé toutes les solutions mentionnées ci-dessus. Trace d'erreur :
Fichier "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", ligne 488, en requête
resp = self.send(prep, *send_kwargs)Fichier "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", ligne 609, en envoir = adapter.send (requête, * kwargs)
Fichier "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", ligne 497, en envoi
lever SSLError(e, request=request)
request.exceptions.SSLError : ("mauvaise poignée de main : SysCallError(-1, 'Unexpected EOF')",)

Informations sur le package système :
cffi==1.9.1
cryptographie==1.6
idna==2.1
ndg-httpsclient==0.4.2
pkg-ressources==0.0.0
pyasn1==0,1.9
analyseur pyc==2.17
pyOpenSSL==16.2.0
requêtes==2.12.3
six==1.10.0

Python : Python 3.5.2 (par défaut, 5 juillet 2016, 12:43:10)
Système d'exploitation : Ubuntu 16.04
OpenSSL 1.0.2g 1 mars 2016

Appréciez votre aide dans cette affaire.

Cela signifie presque certainement que les chiffrements proposés à l'homologue distant ne sont pas acceptables. Si vous utilisez openssl s_client -connect <host>:<port> sur le site Web que vous essayez de contacter, pouvez-vous me dire quel est le résultat ? (Veuillez vous assurer de le faire avec OpenSSL 1.0.2g que vous utilisez).

@Lukasa Merci pour votre réponse rapide. La sortie comme vous l'avez demandé est la suivante :

J'ajoute également la réponse d'OpenSSL 1.0.1f 6 janvier 2014
Il semble fonctionner sur cette version.

@> 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)

J'ai également essayé avec une version antérieure d'openssl et cela semble fonctionner:

@> 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)

Il semble donc que votre serveur ait une objection assez vigoureuse à quelque chose dans votre poignée de main OpenSSL 1.0.2. Connaissez-vous tcpdump ou wireshark ? Si vous l'êtes, ce serait vraiment utile si vous pouviez prendre une capture de paquet des deux poignées de main et les mettre à ma disposition.

Même problème ici avec 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

J'utilise le correctif (qui fonctionnait auparavant) suggéré ici .

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
Système d'exploitation : macOS 10.12.2

L'erreur que j'obtiens est :
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

@rubendibattista www.celestrack.com a une terrible configuration TLS, comme vous pouvez le voir ici . Cela signifie que les versions modernes de Requests ne prennent en charge aucune des suites de chiffrement du serveur, car elles sont toutes faibles et cassées.

Dans un premier temps, je recommande de ne pas contacter du tout ce serveur. Si ce n'est pas possible, vous pouvez modifier les suites de chiffrement par défaut en faisant quelque chose comme ceci .

@Lukasa Merci pour votre soutien. J'ai contacté l'administrateur du site pour signaler ce que vous dites et essayer de trouver une meilleure solution que d'utiliser la solution de contournement que vous proposez.

Salut les gars! J'ai aussi ces erreurs. L'utilisation de python3 et l'installation du combo (pyopenssl ndg-httpsclient pyasn1 urllib3) ont fait l'affaire. Mais je suis curieux de savoir comment python2.7 s'est comporté sur OS X et Ubuntu :

Scénario 001

  • Python : 2,7
  • demandes : 2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3 : non installé
  • environnement virtuel : 1.11.6
  • OS : OS X El Captain 10.11.6 (15G1217)
  • OpenSSL : 0.9.8zh 14 janvier 2016

Erreur

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)

Scénario 002

  • python : 3.4
  • demandes : 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3 : non installé
  • environnement virtuel : 1.11.6
  • OS : OS X El Captain 10.11.6 (15G1217)
  • OpenSSL : 0.9.8zh 14 janvier 2016

Erreur

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)

Scénario 004

  • Python : 2,7
  • demandes : 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3 : non installé
  • Système d'exploitation : Ubuntu 14.4 (dockerisé)
  • OpenSSL : non installé

L'erreur est partie

Scénario 003

  • python : 3.4
  • demandes : 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3 : installé
  • environnement virtuel : 1.11.6
  • OS : OS X El Captain 10.11.6 (15G1217)
  • OpenSSL : 0.9.8zh 14 janvier 2016

L'erreur est partie

L'erreur n'est pas claire, mais elle est très probablement due à votre version OpenSSL. Votre affirmation selon laquelle Ubuntu 14.04 n'a pas d'OpenSSL ne peut tout simplement

Salut!

J'ai un problème avec certains sites https et la bibliothèque de requêtes.
Site : https://ndmc.gov.in/vacancy.aspx

installée:
appdirs==1.4.0
cffi==1.9.1
cryptographie==1.7.2
idna==2.2
ndg-httpsclient==0.4.2
emballage = = 16,8
pyasn1==0,1.9
analyseur pyc==2.17
pyOpenSSL==16.2.0
pyparsing==2.1.10
requêtes==2.13.0
six==1.10.0
urllib3==1.20
OpenSSL 1.0.2k 26 janv. 2017

obtenir une erreur : request.exceptions.SSLError : ("mauvaise poignée de main : SysCallError(-1, 'Unexpected EOF')",)

Système d'exploitation : Archbang linux, le dernier
Python 3.6 & Python 2.7 - même erreur

Vous êtes une autre personne qui remporte notre concours pour tenter de contacter le pire serveur HTTPS au monde . Ce serveur est terriblement configuré, il est totalement non sécurisé. La raison pour laquelle vous rencontrez ce problème est que Requests ne prend plus en charge aucune des suites de chiffrement prises en charge par ce serveur, car elles sont toutes faibles ou non sécurisées. Dans le premier cas, je vous recommande d'essayer de faire pression sur quelqu'un pour qu'il répare le serveur, mais si vous devez vraiment le contacter, vous pouvez rajouter 3DES comme ceci .

@vyscond m'a sauvé la vie. Peu importe ce que j'ai fait sur mon OSX, il n'a disparu que lors de l'installation de pyopenssl ndg-httpsclient pyasn1 urllib3 . Peut-être devrait-il être ajouté en tant que dépendances pour l'installation d'OSX de requests ?

Il n'est utile que sur certaines configurations d'OS X et Python. Le résultat final est qu'ils restent facultatifs.

Je me demande combien de temps les gens passent avant de (peut-être) trouver la solution à ce problème. J'ai dû traverser beaucoup de choses pour trouver ce fil et le parcourir. Est-ce que ça vaut le coup?

Dépend. Des problèmes peuvent également être introduits en exigeant ces dépendances, notamment en ajoutant un nouvel OpenSSL à votre système qui est versionné et géré séparément.

@Lukasa pour certaines raisons, j'ai réussi à faire fonctionner ma configuration, il semble que pyopenssl (installé via des demandes [sécurité] gâche les certificats attachés à certaines demandes.
J'ai dû désinstaller le package pyopenssl afin de forcer les demandes d'utilisation d'OpenSSL dans urllib3.
Cela se produit lors de l'utilisation d'adal (https://github.com/AzureAD/azure-activedirectory-library-for-python) qui ne fonctionne fondamentalement pas avec certaines anciennes versions de requêtes (celles prenant en charge les certificats).
Cela me semble un peu vaudou, cependant.

J'avais ce problème sur Mac OSX Sierra v 10.12.0. J'ai tout essayé sur ce fil, ça n'a pas fonctionné. Enfin mis à niveau mon système d'exploitation vers la v10.12.6 et le problème a disparu.

L'erreur peut également se manifester lors de l'utilisation de requêtes python pour effectuer un appel API vers un site qui se trouve derrière un VPN, et ce tunnel VPN se trouve être en panne à ce moment-là.

Salut les gars!

Je suis moi-même un peu nouveau dans les demandes et j'ai trouvé cette erreur en faisant un POC avec des demandes pour voir s'il peut répondre à mes exigences de conformité aux critères communs. J'ai essayé de connecter mon POC Requests à cet outil , je regarde spécifiquement les cas de test pour FIA-X509 Ext 1.1 mais voici ce que j'ai obtenu :

Traceback (appel le plus récent en dernier) :
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", ligne 601, dans urlopen
fragmenté = fragmenté)
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", ligne 346, dans _make_request
self._validate_conn(conn)
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", ligne 850, dans _validate_conn
conn.connect()
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", ligne 326, en connexion
ssl_context=contexte)
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", ligne 329, dans ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
Fichier "/usr/lib/python3.6/ssl.py", ligne 407, dans wrap_socket
_context=soi, _session=session)
Fichier "/usr/lib/python3.6/ssl.py", ligne 814, dans __init__
self.do_handshake()
Fichier "/usr/lib/python3.6/ssl.py", ligne 1068, dans do_handshake
self._sslobj.do_handshake()
Fichier "/usr/lib/python3.6/ssl.py", ligne 689, dans do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError : EOF s'est produit en violation du protocole (_ssl.c:777)

Lors du traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (appel le plus récent en dernier) :
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", ligne 440, en envoi
délai d'attente = délai d'attente
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", ligne 639, dans urlopen
_stacktrace=sys.exc_info()[2])
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", ligne 388, par incrément
augmenter MaxRetryError(_pool, url, error ou ResponseError(cause))
urllib3.exceptions.MaxRetryError : HTTPSConnectionPool(host='10.0.0.221', port=443) : Nombre maximal de tentatives dépassé avec l'url : / (Causé par SSLError(SSLEOFError(8, 'EOF s'est produit en violation du protocole (_ssl.c:777) )'),))

Lors du traitement de l'exception ci-dessus, une autre exception s'est produite :

Traceback (appel le plus récent en dernier) :
Fichier "req.py", ligne 91, dans
r = session.request('GET', 'https://10.0.0.221', verify=True)
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", ligne 508, en demande
resp = self.send(prep, *send_kwargs)Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", ligne 618, en envoir = adapter.send (requête, * kwargs)
Fichier "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", ligne 506, en envoi
lever SSLError(e, request=request)
request.exceptions.SSLError : HTTPSConnectionPool(host='10.0.0.221', port=443) : Nombre maximal de tentatives dépassé avec l'url : / (Causé par SSLError(SSLEOFError(8, 'EOF s'est produit en violation du protocole (_ssl.c:777) )'),))

voici le code POC que j'utilise :

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)

où 10.0.0.221 est l'endroit où j'ai placé l'outil de vérification.

Je ne sais pas exactement pourquoi cette erreur se produit. J'ai essayé de parcourir ce fil ainsi que plusieurs autres questions sur stackoverflow, mais je n'ai pas trouvé de solution appropriée.

Je dois admettre que je n'ai pas non plus une compréhension claire du protocole TLS pour le moment. Donc si quelqu'un pouvait m'indiquer quel est le problème ici, je lui en serais reconnaissant.

S'il vous plaît laissez-moi savoir si j'ai manqué quelque chose ou si j'ai besoin de fournir des informations supplémentaires. Merci!

Tout comme une information, cette erreur se produit également lorsque SSL n'est pas activé sur le serveur auquel vous vous connectez.

Cette page vous a été utile?
0 / 5 - 0 notes