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.
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 :
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)
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)
L'erreur est partie
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.
Commentaire le plus utile
@the-efi Avez-vous
pyopenssl
,pyasn1
etndg-httpsclient
installés ?