Verwandt vielleicht mit #1083. Standard requests.get()
für diese bestimmte Site/Seite https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html
ergibt:
>>> import requests
>>> requests.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Wenn Sie request-toolbelt
's SSLAdapter
verwenden, um verschiedene SSL-Versionen auszuprobieren, scheitern sie alle, wie es scheint ... siehe folgende Rückverfolgungen.
TLSv1:
>>> adapter = SSLAdapter('TLSv1')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
SSLv3:
>>> adapter = SSLAdapter('SSLv3')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
SSLv2:
>>> adapter = SSLAdapter('SSLv2')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/adapters.py", line 378, in send
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='docs.apitools.com', port=443): Max retries exceeded with url: /2014/04/24/a-small-router-for-openresty.html (Caused by <class 'socket.error'>: [Errno 54] Connection reset by peer)
Beachten Sie, dass der letzte einen Connection reset by peer
-Fehler ausgibt, der sich von den anderen unterscheidet, aber ich bin mir ziemlich sicher, dass SSLv2 sowieso nicht vom Server unterstützt wird.
Zum Spaß habe ich versucht, auch bei der letzten Anfrage einige passendere Header durchzugeben:
>>> headers = {
... 'Accept': u"text/html,application/xhtml+xml,application/xml",
... 'User-Agent': u"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36",
... 'Accept-Encoding': u"gzip,deflate",
... 'Accept-Language': u"en-US,en;q=0.8"
... }
>>> adapter = SSLAdapter('SSLv2')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html', headers=headers)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/Users/jaddison/.virtualenvs/techtown/lib/python2.7/site-packages/requests/adapters.py", line 378, in send
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='docs.apitools.com', port=443): Max retries exceeded with url: /2014/04/24/a-small-router-for-openresty.html (Caused by <class 'socket.error'>: [Errno 54] Connection reset by peer)
Da gibt es auch keine Würfel. So sehen die HTTPS-Verbindungsinformationen in Chrome auf dem Mac aus:
Ich bin mir nicht sicher, aber etwas Googeln deutet darauf hin, dass es sich wahrscheinlich um ein Problem mit der Verschlüsselungsliste handelt, was eher urllib3 ist, denke ich?
Ich habe versucht, DEFAULT_CIPHER_LIST
in pyopenssl
zu ändern, bin aber auf Importfehler gestoßen. Zu diesem Zeitpunkt schien es, als wären die Dinge einfach kaputt, und es gab noch keinen richtigen Weg, um das Problem zu beheben.
Versionsinformation:
OSX-Mavericks
Python 2.7.5
OpenSSL 0.9.8y 5. Feb. 2013 - (von python -c "import ssl; print ssl.OPENSSL_VERSION"
)
Anfragen 2.2.1
Requests-Toolbelt 0.2.0
urllib3 1.8
Leider hat dies nichts mit dem von Ihnen identifizierten Problem zu tun und ist ausschließlich auf das beschissene OpenSSL zurückzuführen, mit dem OS X standardmäßig geliefert wird. Version 0.9.8y hat einige echte Probleme mit der Ausführung von SSL-Handshakes, und einige Server tolerieren es nicht gut. Die Verwendung von Python 3 auf meiner OS X-Box (daher die Verwendung eines neueren OpenSSL) zeigt, dass es kein Problem gibt.
Sie haben zwei Möglichkeiten:
env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install PyOpenSSL
ausführen.Ah, sieht so aus, als wäre ich damals einem Ablenkungsmanöver gefolgt - ich habe sowieso nicht vor, irgendetwas auf OSX bereitzustellen. Sieht so aus, als würde ich meine Tests auf eine Linux-Virtualbox verschieben. Entschuldigung für dieses langatmige Thema!
Keine Notwendigkeit, sich zu entschuldigen, diese Frage zu stellen, war das Richtige: Es ist bizarr spezifisches Wissen zu wissen, dass OS X dieses Problem hat. =)
Okay, das ist ein Mist. Ich habe ein 32-Bit-Virtualbox-Image für Ubuntu 14.04-Server über Vagrant erstellt, und dies geschieht immer noch, mit Ausnahme des SSLv2-Falls, bei dem es fehlschlägt, weil das Protokoll nicht in der OpenSSL-Version in Ubuntu 14.04 enthalten ist (ich glaube, dass SSLv2 alt ist). und veraltet).
Versionen:
Ubuntu 14.04 32bit (über Vagrant/Virtualbox-Kombination)
Python 2.7.6
Anfragen==2.2.1
Anfragen-Toolbelt==0.2.0
urllib3==1.8.2
EDIT: OpenSSL-Version vergessen ...
python -c "ssl importieren; ssl.OPENSSL_VERSION drucken"
OpenSSL 1.0.1f 6. Januar 2014
TLSv1:
>>> import requests
>>> from requests_toolbelt import SSLAdapter
>>> adapter = SSLAdapter('TLSv1')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
SSLError: [Errno 1] _ssl.c:510: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
SSLv2:
>>> import requests
>>> from requests_toolbelt import SSLAdapter
>>> adapter = SSLAdapter('SSLv3')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
SSLError: [Errno 1] _ssl.c:510: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
SSLv23:
>>> import requests
>>> from requests_toolbelt import SSLAdapter
>>> adapter = SSLAdapter('SSLv23')
>>> s = requests.Session()
>>> s.mount('https://', adapter)
>>> s.get('https://docs.apitools.com/2014/04/24/a-small-router-for-openresty.html')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 395, in get
return self.request('GET', url, **kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/home/vagrant/.virtualenvs/techtown/local/lib/python2.7/site-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
SSLError: [Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Vielleicht ist dies dann ein Problem mit der Verschlüsselungsliste? Oder ist die hier verwendete OpenSSL-Version noch problematisch?
Ich bin absolut bereit, etwas Zeit zu investieren, um bei Bedarf beim Debuggen zu helfen ... vorausgesetzt, Sie geben mir eine Richtung.
VM wird heruntergeladen. Ich kann das auf ArchLinux nicht reproduzieren.
Die Stacktraces zeigen dies an, aber ich möchte sicher sein: Sie verwenden _nicht_ PyOpenSSL, sondern nur die stdlib?
@t-8ch Danke, dass du dir das angesehen hast, ich bin etwas verwirrt. OpenSSL macht mir das Leben wirklich schwer =(
@t-8ch Ich habe PyOpenSSL nicht installiert, wenn Sie das fragen?
Ich hätte (vielleicht zu Unrecht) angenommen, dass pip install requests
mir alles geben sollte, was ich brauche, um requests.get('...')
erfolgreich auf einer HTTPS-Seite aufzurufen. Was natürlich größtenteils funktioniert, nur aus irgendeinem Grund nicht für diese Pornoseite.
@jaddison Das tut es _meistens_. Leider nervt die Standardbibliothek von Python 2.7 sehr und unterstützt einige Funktionen wie SNI nicht.
Ich frage mich, ob das SNI ist ...
@jaddison Hinter den Kulissen gibt es zwei verschiedene Codepfade. Sie sollten sich nicht darum kümmern müssen, aber es hilft beim Debuggen, dies zu wissen.
Allerdings kann ich das jetzt auf Ubuntu reproduzieren. Aber nur o Py2. Auf Py3 ist alles in Ordnung.
Ich vermute, @Lukasa hat Recht und der Server schlägt fehl, wenn der Client kein SNI verwendet.
Es stört mich, dass ein Fehlen von SNI je nach Server auf verschiedene Weise fehlschlägt.
Ich habe diese Änderung zwischen OpenSSL 1.0.1f und 1.0.1g bemerkt (https://www.openssl.org/news/openssl-1.0.1-notes.html):
Add TLS padding extension workaround for broken servers.
EDIT: Ahh, egal - der Fehler sollte nicht zwischen Py 2 und 3 variieren, würde ich denken.
@jaddison Um zu testen, ob es sich um SNI handelt, müssen Sie die SNI-Anforderungen für Python 2 installieren .
@Lukasa hatte Recht. Vergleichen:
$ openssl s_client -connect docs.apitools.com:443
CONNECTED(00000003)
139846853338768:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:762:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 517 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
$ openssl s_client -connect docs.apitools.com:443 -servername docs.apitools.com
... happy handshake here
Zur Erläuterung: Der zweite Befehl aktiviert die SNI-Funktionalität von openssl s_client
.
Sie können a) zu python3 wechseln b) zusätzliche Abhängigkeiten installieren.
Die stdlib hat im Moment keine Möglichkeit SNI zu machen.
Danke für die schnelle Rückmeldung. Da es keinen Fehler gibt, werde ich dies schließen ... wieder.
Hey, danke Jungs!! Ich habe Python3 auf meinem Mac installiert und Boom, es funktioniert.
Ich möchte mich nur einmischen und sagen, dass ich dieses Problem unter OS X 10.9.5, Python 2.7.7 und OpenSSL 0.9.8zc erlebt habe.
Ich konnte mein Handshaking-Problem beheben, indem ich:
brew install OpenSSL
cryptography
-Pakets, das mit dem neuen OpenSSL verknüpft ist ( env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptography
)pip install requests[security]
Danke, @Microserf. Ich verwende so ziemlich die gleichen Spezifikationen (10.9.5, Python 2.7.6, installiert über Homebrew, aber kompiliert mit vom System bereitgestelltem OpenSSL 0.9.8zg) und dies war mein gesamter Prozess, um requests
für Django zum Laufen zu bringen :
brew install openssl
Installieren Sie requests
mit einem Haufen SNI-Zeug , kompiliert gegen unsere neue Installation von OpenSSL. Die Option [security]
installiert einfach pyopenssl ndg-httpsclient pyasn1
env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install requests[security] urllib3
Und wir sind startklar:
"""
This may or may not be needed. See:
https://urllib3.readthedocs.org/en/latest/security.html#openssl-pyopenssl
"""
# from urllib3.contrib import pyopenssl
# pyopenssl.inject_into_urllib3()
import requests
# r = requests.get(...)
Gibt es eine endgültige Antwort darauf, wie dies unter Ubuntu funktioniert? Ich stoße auf dieses Problem, und es sieht so aus, als ob die einzige Antwort hier betrifft, wie dies auf einem Mac funktioniert. Ein Upgrade unserer gesamten Codebasis auf Python 3 ist keine Option.
OK, ich habe vielleicht meine eigene Frage beantwortet. Was ich getan habe läuft darauf hinaus:
sudo apt-get install libffi-dev
pip install pyOpenSSL ndg-httpsclient pyasn1
@lsemel danke, das hat mir gerade eine Menge Zeit gespart
@lsemel Bist du dir sicher? Ich habe es unter Ubuntu 15.10 ausprobiert und es funktioniert immer noch nicht mit Python 2.7.10.
Es funktioniert mit Python 2.7 auf Travis CI:
https://travis-ci.org/playing-se/swish-python
Habe es jetzt zum Laufen gebracht! Ich habe einfach pyOpenSSL deinstalliert:
pip uninstall pyOpenSSL
Vielleicht sollten wir nur pyopenssl.inject_into_urllib3() verwenden, wenn die Python-Version kleiner als 2.7.9 ist? pyOpenSSL scheint unter Ubuntu und Windows Probleme zu verursachen, wenn die Python-Version 2.7.10 ist.
PyOpenSSL sollte nichts kaputt machen. Wenn dies der Fall ist, ist dies ein Fehler, der gemeldet werden sollte.
Ich muss das prüfen, aber gibt es einen guten Grund, pyopenssl in urllib3 einzufügen, wenn die Python-Version 2.7.9 oder neuer ist?
Ich denke an so etwas:
# Check if Modern SSL with SNI support
try:
from ssl import SSLContext
from ssl import HAS_SNI
except ImportError:
# Attempt to enable urllib3's SNI support, if possible
try:
from .packages.urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3()
except ImportError:
pass
Ja, häufig gibt es das. Beispielsweise verlinken unter OS X die meisten Pythons mit dem System OpenSSL, das Version 0.9.8zg ist. PyOpenSSL wird jedoch mit einem viel neueren OpenSSL (1.0.2) verknüpft. Das macht die Verwendung von PyOpenSSL zu einer wesentlichen Sicherheitsverbesserung.
Darüber hinaus bietet uns PyOpenSSL einen viel besseren Zugriff auf OpenSSL, sodass wir es effektiver sichern können.
OK, ich habe jetzt ein wenig damit herumgespielt.
Es FUNKTIONIERT mit pyopenssl, ABER nicht, wenn ndg-httpsclient installiert ist.
Ich kann es jedoch mit ndg-httpsclient zum Laufen bringen, wenn ich pyasn1 deinstalliere und mir diese Warnungen gebe:
/usr/lib/python2.7/dist-packages/ndg/httpsclient/subj_alt_name.py:22: UserWarning: Error importing pyasn1, subjectAltName check for SSL peer verification will be disabled. Import error is: No module named pyasn1.type
warnings.warn(import_error_msg)
/usr/lib/python2.7/dist-packages/ndg/httpsclient/ssl_peer_verification.py:25: UserWarning: SubjectAltName support is disabled - check pyasn1 package installation to enable
warnings.warn(SUBJ_ALT_NAME_SUPPORT_MSG)
/usr/lib/python2.7/dist-packages/ndg/httpsclient/subj_alt_name.py:22: UserWarning: Error importing pyasn1, subjectAltName check for SSL peer verification will be disabled. Import error is: No module named pyasn1.type
warnings.warn(import_error_msg)
Gleiches Verhalten unter Ubuntu 15.10 und Windows 10 mit installiertem Python 2.7.10.
Das liegt daran, dass ohne ndg-httpsclient die PyOpenSSL-Unterstützung nicht verwendet wird.
Ja, ich muss untersuchen, warum es funktioniert, wenn SubjectAltName deaktiviert ist. Irgendeine Idee?
Das Problem besteht mit ziemlicher Sicherheit darin, dass Sie jeweils unterschiedliche OpenSSLs verwenden.
Ich hatte das gleiche Problem auf meiner Ubuntu 14.04-Box und Python 2.7.11
Es ist von SNI
Was für mich funktioniert hat, war Folgendes:
Ich denke, es gab eine Überprüfung der Installationszeit auf urllib3 oder Anfragen, die verhinderten, dass die Dinge ohne die Deinstallation funktionierten
@jvanasco was verwendest du, um diese Pakete zu installieren? Ich nehme an Pip. Warum installieren Sie urllib3 und Anfragen separat?
Nun, ich brauchte urllib3 in der virtuellen Umgebung ... aber ich habe es installiert, um zu versuchen, die Anforderungen von pip und easy_install zu installieren. (ich habe beides benutzt)
Ich habe einen Web-Indexer und ein paar URLs sind kaputt gegangen. Ich habe ein schnelles Skript geschrieben, um die kaputten Pakete auszuprobieren, und die Pakete in den urllib3-Anweisungen zu SSL-Problemen neu installiert / gelöscht + installiert, bis sie funktionierten.
Am 31. Mai 2016 um 19:25 Uhr schrieb Ian Cordasco [email protected] :
@jvanasco was verwendest du, um diese Pakete zu installieren? Ich nehme an Pip. Warum installieren Sie urllib3 und Anfragen separat?
—
Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an oder schalten Sie den Thread stumm.
Ich sehe dieses Problem immer noch und habe die vorgeschlagenen Problemumgehungen ausprobiert.
Ich habe meine Python-Version auf 2.7.11 aktualisiert
Ich habe die 3 zusätzlichen Pakete installiert.
Ich habe die von @jvanasco vorgeschlagene Deinstallations-/Installationssequenz ausprobiert und trotzdem den SSLError erhalten
Auch mit Ubuntu 14.04 gibt es leider kein OpenSSL-Update, also muss ich die hier geposteten Problemumgehungen verwenden und habe kein Glück.
Irgendwelche zusätzlichen Schritte, die ihr möglicherweise unternommen habt?
Danke
@Lekinho Ich fand, dass es hilfreich war, ein kurzes Testskript zu erstellen, das die Domäne testete, mit der ich Probleme hatte.
es war nur:
import requests
r = requests.get(bad_url)
print r.__dict__
@Lekinho Sie können pyopenssl aus Anfragen in Ihrem Code extrahieren:
try:
from requests.packages.urllib3.contrib import pyopenssl
pyopenssl.extract_from_urllib3()
except ImportError:
pass
@Lekinho Wenn Sie immer noch auf dieses Problem mit Python 2.7.11 stoßen, unterstützt der Remote-Server höchstwahrscheinlich nicht die TLS-Einstellungen, die von Anfragen verwendet werden. Ist der betreffende Server im öffentlichen Internet verfügbar? Wenn ja, kannst du mir die URL geben?
Ich habe den pyopenssl-Import wie vorgeschlagen ausprobiert.
Leider ist diese nicht öffentlich zugänglich.
Ich habe jedoch die genauen Details darüber, welche openSSL-Version der Server hat.
Grundsätzlich laufen wir auf einer virtuellen Redhat-Maschine, ich hatte dieses openSSL, als alles funktionierte: openssl-1.0.1e-42.el6_7.4.x86_64
Dann haben wir ein Redhat-Upgrade durchgeführt und es gab ein Update für openssl: openssl-1.0.1e-48.el6_8.1.x86_64
Diese Version hat immer das Problem mit dem schlechten Handshake, wenn openssl unter Ubuntu 14.04 verwendet wird.
Habt ihr irgendwelche öffentlichen URLs, mit denen ich versuchen kann, um zu sehen, ob die Problemumgehungen geholfen haben, das Problem zu lösen, und es ist nur diese einzigartige Kombination, die ich habe, die das Problem ist?
Derselbe Computer ist in Ordnung, wenn REST-Anforderungen über den Browser gesendet werden (dh ohne Ubuntu openssl ).
Danke
Können Sie bitte die Ausgabe von rpm -q --changelog openssl
bereitstellen?
[ admin@leke-2-2-8-11 ~]$ rpm -q --changelog openssl
Es sieht so aus, als hätte @Lekinho ihr Github-Konto gelöscht? Für die nächste Person, die Probleme hat – es ist möglich, dass ihr Upgrade von OpenSsl oder Python einige kompilierte C-Bindungen beschädigt hat. Immer wenn ich ein solches Upgrade habe, lösche ich meine virtuelle Umgebung oder alle Pakete und baue dann ein neues.
@jvanasco ich bin immer noch hier.
Ich habe mich gefragt, ob Sie eine öffentliche URL haben, mit der ich das testen könnte. Ich möchte sehen, ob die Problemumgehung das Problem für bestätigte Fälle tatsächlich löst (das bedeutet, dass ich bei dem Versuch nichts vermasselt habe).
@Lukas
Teilmenge der Änderungen zwischen Arbeitsversion und aktualisierter Version :+1:
Mo 2. Mai 2016 Tomáš Mráz [email protected] 1.0.1e-48.1
CVE-2016-2105 behoben – möglicher Überlauf in base64-Kodierung
CVE-2016-2106 behoben - möglicher Überlauf in EVP_EncryptUpdate()
CVE-2016-2107 behoben – Polsterorakel in genähtem AES-NI CBC-MAC
CVE-2016-2108 behoben – Speicherbeschädigung im ASN.1-Encoder
CVE-2016-2109 behoben – möglicher DoS beim Lesen von ASN.1-Daten aus BIO
CVE-2016-0799 behoben – Speicherprobleme in BIO_printf
Mittwoch, 24. Februar 2016 Tomáš Mráz [email protected] 1.0.1e-48
CVE-2016-0702 behoben – Seitenkanalangriff auf modulare Potenzierung
Behebung von CVE-2016-0705 – Double-Free beim Parsen privater DSA-Schlüssel
CVE-2016-0797 behoben – Heap-Korruption in BN_hex2bn und BN_dec2bn
Dienstag, 16. Februar 2016 Tomáš Mráz [email protected] 1.0.1e-47
CVE-2015-3197 behoben – Erzwingung der SSLv2-Verschlüsselungssammlung
Deaktivieren Sie SSLv2 in der generischen TLS-Methode
Freitag, 15. Januar 2016 Tomáš Mráz [email protected] 1.0.1e-46
1-Byte-Speicherleck im pkcs12-Parse behoben (#1229871)
einige Optionen des Geschwindigkeitsbefehls dokumentieren (#1197095)
Donnerstag, 14. Januar 2016 Tomáš Mráz [email protected] 1.0.1e-45
Korrigieren Sie hochpräzise Zeitstempel in der Zeitstempelbehörde
Mo. 21. Dez. 2015 Tomáš Mráz [email protected] 1.0.1e-44
CVE-2015-7575 behoben – Verwendung von MD5 in TLS1.2 nicht zulassen
Freitag, 4. Dez. 2015 Tomáš Mráz [email protected] 1.0.1e-43
CVE-2015-3194 behoben – Absturz der Zertifikatsprüfung mit fehlendem PSS-Parameter
CVE-2015-3195 – X509_ATTRIBUTE Speicherleck behoben
Behebung von CVE-2015-3196 – Race-Condition bei der Handhabung von PSK-Identitätshinweisen
Dienstag, 23. Juni 2015 Tomáš Mráz [email protected] 1.0.1e-42
Aktualisieren :
Also habe ich einen Workaround dafür gefunden.
Im Grunde hat sich ein Kollege über das Problem informiert und einige Beiträge über RHEL openssl-Unterstützung für die ECC/ECDH-Verschlüsselung gesehen, die aus irgendeinem Grund nicht 100 % waren.
Wir haben die Anfrage an die URL ausprobiert, indem wir ECDH-Chiffren explizit deaktiviert haben (Hinzufügen der Negation aus dem openssl-Skript selbst, dh openssl s_client -connect 10.85.103.218:8443 -cipher 'DEFAULT:!ECDH').
Wir konnten uns erfolgreich verbinden.
Hier ist die Standard-Verschlüsselungsliste für Openssl unter Ubuntu 14.04
ECDH+ AESGCM:DH+AESGCM :ECDH+AES256:DH+AES256:ECDH+AES128:DH+ AES:ECDH+HIGH :DH+ HIGH:ECDH+3DES :DH+3 DES:RSA+AESGCM :RSA+ AES:RSA+HIGH :RSA +3DES:!aNULL:!eNULL:!MD5
Mit diesem Wissen habe ich also pyopenssl verwendet, um meine Standard-SSL-Chiffren auszudrucken, und jede ECDH-Chiffre explizit aus der Zeichenfolge entfernt. Haben Sie dies direkt im Block zum Importieren von urllib3 aus dem Anforderungspaket getan (dh bevor Sie mit den eigentlichen Anforderungen beginnen), ist hier etwas Ähnliches:
https://github.com/kennethreitz/requests/issues/1308
Mir ist klar, dass diese Aktion Sicherheitsrisiken beinhalten kann, aber das bringt uns zumindest in Schwung und bringt mehr Licht ins Dunkel.
Warum diese speziellen Chiffren ein Problem für RHEL zu sein scheinen, habe ich keine Ahnung.
Ich werde versuchen, wenn ich mehr Zeit habe, um zu sehen, welche speziellen RHEL-Änderungen dies eingeführt haben könnten, und mehr über den Zweck lesen.
Weiß jemand mehr über Chiffren im Allgemeinen?
Habe das gleiche Problem... ARG...
@lukas-gitl Frustration wird dir nicht helfen, das Problem zu lösen. Wenn Sie uns Informationen über Ihre Umgebung zur Verfügung stellen (vorzugsweise einige – wenn nicht alle – der Informationen, die wir Lekinho oben angefragt haben), wird dies hilfreich sein.
@sigmavirus24 Entschuldigung. Ich wollte mehr Informationen liefern und wurde dann abgelenkt (da ich keine Zeit dafür hatte). Ich verwende Ubuntu 14.04, Python 2.7.6 und die neueste Anforderungsversion auf Pip. Dies passiert, wenn ich versuche, als API-Gateway-Endpunkt darauf zuzugreifen (sie könnten ziemlich restriktiv sein).
Ich habe versucht, die virtuelle Umgebung zu entfernen und neu zu generieren, aber das hat es leider nicht gelöst.
Lassen Sie mich wissen, was Sie sonst noch brauchen. Ich bin vorerst auf nodejs umgestiegen, würde aber gerne bei einer Lösung helfen.
@lukas-gitl Es ist sehr wahrscheinlich, dass der Server, den Sie kontaktieren, Verschlüsselungen benötigt, die Sie nicht anbieten, oder TLS-Versionen, die Sie nicht anbieten. Dies kann mit dem von Ihnen installierten OpenSSL zusammenhängen. Sie sollten auch versuchen, pip install requests[security]
: Sie könnten auf Probleme mit SNI stoßen.
Ja, das habe ich auch schon probiert. Lassen Sie mich hier ein kurzes Testskript zusammenstellen, damit wir auf derselben Seite sind.
virtualenv -p /usr/bin/python2.7 env
Quelle env/bin/activate
Pip-Installationsanfragen
Pip-Installationsanfragen[Sicherheit]
echo 'Anforderungen importieren' >> test.py
echo 'requests.get("https://API_ID.execute-api.us-west-2.amazonaws.com/ENV/ENPOINT")' >> test.py
pythontest.py
Und welchen konkreten Fehler sehen Sie?
.../env/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:318:
SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
SNIMissingWarning
.../env/local/lib/python2.7/site-packages/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.
InsecurePlatformWarning
Traceback (most recent call last):
File "test.py", line 2, in <module>
requests.get("https://sbsz8eqowe.execute-api.us-west-2.amazonaws.com/dev/segment_to_s3_webhook")
File ".../env/local/lib/python2.7/site-packages/requests/api.py", line 71, in get
return request('get', url, params=params, **kwargs)
File ".../env/local/lib/python2.7/site-packages/requests/api.py", line 57, in request
return session.request(method=method, url=url, **kwargs)
File ".../env/local/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File ".../env/local/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File ".../env/local/lib/python2.7/site-packages/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure```
Also muss ich grundsätzlich auf eine neuere Version von Python aktualisieren?
Ok, diese beiden Warnungen deuten darauf hin, dass Ihre Anfragen nicht wirklich die Erweiterungen von "requests[security]" verwenden. Es deutet stark darauf hin, dass das von Ihnen ausgeführte Python _nicht_ dasjenige ist, das Sie in Ihrer virtuellen Umgebung installiert haben: Die Erweiterung "requests[security]" sollte diese Warnungen entfernen.
@lukas-gitl siehe meine Notizen oben.
Hast du Zugriff auf den Server? Vergleichen Sie die Liste der Standardchiffren für den Server und den Client.
Es ist sehr wahrscheinlich, dass einer von ihnen den ersten Satz von Chiffren im anderen nicht unterstützt, daher der Fehler.
Sie können Standardchiffren mit einem einfachen Skript überprüfen, wie ich es hier verwendet habe:
System importieren
Betriebssystem importieren
SSL importieren
print(ssl.OPENSSL_VERSION)
sys.path.insert(1, os.path.abspath(os.path.join(os.getcwd(), 'lib')))
sys.path.append('/usr/local/lib/python2.7/dist-packages')
Anfragen importieren
aus request.packages.urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3()
pyopenssl.DEFAULT_SSL_CIPHER_LIST drucken
Ok, jetzt bin ich echt verwirrt. Die Fehlermeldung kommt aus der virtuellen Umgebung. Wie könnten diese also von dort kommen, während ich sie aus einer anderen Python-Umgebung ausführe?
Also habe ich pip install pyopenssl ndg-httpsclient pyasn1
statt pip install requests[security]
probiert und das hat funktioniert...
Aha, ich vermute, Ihr Pip ist zu alt, um mit den Extras umzugehen.
Ach, verdammt. Das erklärt einiges. Vielen Dank für Ihre Hilfe!
Ich bin hier auf das gleiche Problem gestoßen, ich sollte eine GET-Anfrage mit folgendem Code senden:
requests.get('https://mdskip.taobao.com/core/initItemDetail.htm?itemId=530444505608&showShopProm=false&queryMemberRight=true&isRegionLevel=false&tmallBuySupport=true&addressLevel=2&sellerPreview=false&isForbidBuyItem=false&cachedTimestamp=1466835924196&offlineShop=false&household=false&tryBeforeBuy=false&isSecKill=false&service3C=false&isApparel=true&isUseInventoryCenter=false&cartEnable=true&isAreaSell=false&callback=setMdskip×tamp=1466841669969&isg=Al9faN3XWRpIf6UEoQ88UH/1b7np0rNm&ref=https%3A%2F%2Fs.taobao.com%2Fsearch%3Fq%3D%25E6%258B%2589%25E5%25A4%258F%25E8%25B4%259D%25E5%25B0%2594%26imgfile%3D%26commend%3Dall%26ssid%3Ds5-e%26search_type%3Ditem%26sourceId%3Dtb.index%26spm%3Da21bo.50862.201856-taobao-item.1%26ie%3Dutf8%26initiative_id%3Dtbindexz_20160625')
Leider bekam ich die Fehlerinfo:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/requests/api.py", line 71, in get
return request('get', url, params=params, **kwargs)
File "/Library/Python/2.7/site-packages/requests/api.py", line 57, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/Library/Python/2.7/site-packages/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL23_GET_SERVER_HELLO', 'sslv3 alert handshake failure')],)",)
Ich habe versucht, openssl zu installieren, openssl zu aktualisieren, pip install --upgrade pip, pip install requirements, pip install request[security] zu brauen, aber sie haben nicht funktioniert.
Wenn ich jedoch openssl version
, bekomme ich OpenSSL 0.9.8zh 14 Jan 2016
, ich weiß nicht, ob das in Ordnung ist.
Gibt es jemanden, der mir dabei helfen könnte?
@jschwinger23 Kannst du bitte auch pip install pyopenssl ndg-httpsclient pyasn1
laufen lassen?
@Lukasa Danke für deine Antwort. Ich habe erneut bestätigt, dass ich sie installiert habe:
$ pip install pyopenssl ndg-httpsclient pyasn1
Requirement already satisfied (use --upgrade to upgrade): pyopenssl in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Requirement already satisfied (use --upgrade to upgrade): ndg-httpsclient in /Library/Python/2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /Library/Python/2.7/site-packages
aber Code immer noch unten.
Wie auch immer, ich habe herausgefunden, dass in Python3 alles gut läuft, und ich bin froh, in Python3 programmieren zu können.
Vielen Dank.
Obige Anweisungen befolgt, aber dieses Problem tritt immer noch auf
```
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/requests/api.py", line 71, in get
return request('get', url, params=params, **kwargs)
File "/Library/Python/2.7/site-packages/requests/api.py", line 57, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/Library/Python/2.7/site-packages/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL23_GET_SERVER_HELLO', 'sslv3 alert handshake failure')],)",)
irgendwelche Ideen?
``````
@rohanpai Es ist wahrscheinlich, dass Sie entweder keine Verschlüsselungsüberschneidung haben oder dass der Remote-Server mit den von Ihnen angebotenen Versionen unzufrieden ist oder dass von Ihnen erwartet wird, dass Sie ein Client-Zertifikat bereitstellen, dies jedoch nicht der Fall ist. Konkretere Ratschläge zu geben ist schwer. Versuchen Sie dies , um das Problem zu untersuchen.
Unter Ubuntu 14.04LTS musste ich Folgendes tun:
sudo pip install ndg-httpsclient pyasn1 --upgrade
Beachten Sie, dass es in Ubuntu nicht möglich ist, pyopenssl
zu aktualisieren/entfernen, da es dem Betriebssystem gehört.
Die Lösung von markstrefford hat bei mir auch unter Mac OS Sierra funktioniert
Die Lösung von @markstrefford hat auch für mich funktioniert.
Nur ein Hinweis für alle, die OpenSSL 1.1 verwenden:
Sie werden auch auf dieses Problem stoßen, selbst wenn Sie TLS-Adapter erzwingen, wenn der Remote-Server Elliptic Curves als erste Option anbietet.
Die Ursache ist: http://bugs.python.org/issue29697
Hallo Leute! Ich habe das gleiche Problem mit dem folgenden Server https://34.200.105.231/SID/Service.svc?wsdl
. Ich habe alles versucht und ich springe von und zu den gleichen 2 Fehlern:
requests.exceptions.SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:661)
Irgendwelche Ideen? @Lukasa , ich sehe ein paar Probleme mit dem Zertifikat, aber es scheint, als sollte es nicht so schlimm sein: https://sslanalyzer.comodoca.com/?url=34.200.105.231
Das Zertifikat verursacht dieses Problem normalerweise nicht: Dieses Problem wird dadurch verursacht, dass der Server bei uns auflegt, also ist es normalerweise das Ergebnis einer Nichtübereinstimmung der Cipher Suite. In diesem Fall ist genau das der Fall, wie Sie hier sehen können .
Dies ist ein Server, der ehrlich gesagt niemals dem offenen Internet ausgesetzt werden sollte. Es gibt keine sicheren Methoden zur Kommunikation mit diesem Server: keine, null. Aus diesem Grund schlägt der Handshake fehl: Anfragen akzeptiert nur moderne Verschlüsselungssammlungen, und für diesen Server sind keine modernen Verschlüsselungssammlungen verfügbar. Die beste Option ist TLS_RSA_WITH_3DES_EDE_CBC_SHA
, eine Option, die wir entfernt haben, da sie anfällig für praktische Angriffe auf groß angelegte Datenübertragungen ist.
Wenn dieser Server Ihnen gehört, aktualisieren Sie ihn bitte auf eine bessere TLS-Implementierung oder ändern Sie die Einstellungen. Ansonsten ist mein erster Ratschlag, es zu überdenken, jemals mit diesem Server zu sprechen. Wenn Sie müssen, können Sie den Code hier verwenden, aber ich empfehle dringend , dass Sie Druck auf den Serverbetreiber ausüben, um dieses Durcheinander zu beheben.
@Lukasa – danke, dass du das mit allen durchgearbeitet hast! Ich habe mir das meiste durchgelesen und ausprobiert
Beim Ausführen von Skripten unter Windows funktioniert alles.
Beim Ausführen des Skripts unter OSX erhalten Sie:
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)
Ich bin nicht überzeugt, dass es nicht der Server selbst ist, würde mich aber über jede zusätzliche Hilfe freuen, um dies zu bestätigen und/oder mich aus diesem Kaninchenbau herauszuholen. Es wäre ein großer Gewinn, es zum Laufen zu bringen.
env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install --force-reinstall --no-cache-dir {PACKAGE}
installiertIch bin mir nicht 100% sicher, dass die Installation gegen Openssl tatsächlich etwas bewirkt hat, da es sich anscheinend genauso verhält wie die Installation ohne (z. B. Geschwindigkeit und Messaging sind alle gleich).
Wie in einem anderen Thread (oben) angegeben, eine direkte Verbindung über openSSL appears
, um glücklich zu sein?
openssl s_client -connect XXX.102.7.147:443
CONNECTED(00000003)
write:errno=0
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 198 bytes
Verification: OK
---
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:
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1493384325
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
---
Uh ... OpenSSL ist technisch in Ordnung, aber dieses OpenSSL hat keine Verschlüsselung ausgehandelt (das heißt, es scheint SSL_NULL_WITH_NULL_NULL
ausgehandelt zu haben. Können Sie ssllabs auf Ihrem Server ausführen und überprüfen, welche Verschlüsselungssammlungen es unterstützt?
@Lukasa Es ist nicht im Internet verfügbar. Gibt es eine Befehlszeilensonde, die ich abfeuern könnte und die Ihnen angemessene Einblicke geben könnte?
Du könntest es mit Cipherscan versuchen.
@Lukasa hat es installiert ... es wirkt wackelig (keine Ausgabe, beobachtet es) ... werde zurückschreiben, wenn mir etwas einfällt, das weitergegeben werden könnte. Danke für die Anleitung!
@Lukasa vielen Dank für Ihre Hilfe - Cipherscan funktionierte nie wirklich - aber unsere Probleme wurden behoben. Es hatte nichts damit zu tun und war eine dumme IP-Nichtübereinstimmung in unseren Umgebungen ... Lektionen gelernt! Danke ...
Überhaupt kein Problem, ich bin froh, dass Sie es sortiert haben!
streamlink -l debug h ttpstream://https :// www.arconaitv.us/stream.php?id=43 am schlimmsten
[cli][info] streamlink läuft als root! Vorsichtig sein!
[cli][debug] OS: Linux-4.14.0-041400-generic-x86_64-with-Ubuntu-14.04-trusty
[cli][debuggen] Python: 2.7.6
[cli][debug] Streamlink: 0.13.0+27.g2ff314c
[cli][debug] Requests(2.19.1), Socks(1.6.7), Websocket(0.48.0)
[cli][info] Passendes Plugin http für URL h ttpstream://https :// www.arconaitv.us/stream.php?id=43 gefunden
[plugin.http][debug] URL= https://www.arconaitv.us/stream.php?id=43; Parameter={}
[cli][info] Verfügbare Streams: live (am schlechtesten, am besten)
[cli][info] Eröffnungsstream: live (http)
[cli][debug] 8192 Bytes vorpuffern
[cli][info] Startspieler: /usr/bin/vlc
[cli][debug] Schreibt Stream zur Ausgabe
[cli][info] Stream beendet
[cli][info] Aktuell geöffneter Stream wird geschlossen..
versucht, aber kein Glück
atlast funktioniert tvplayer auf lokalem pc. Ich habe tinyproxy auf meinem lokalen PC installiert, aber in vps funktioniert httpproxy xxxx nicht.
Ist tinyproxy ok oder ich brauche einen anderen Proxy-Server, um ihn auf meinem lokalen PC zu installieren.
Hallo @maanich , dies scheint nicht direkt mit diesem Problem zusammenzuhängen oder ein Fehlerbericht für Anfragen zu sein, wofür dieser Issue-Tracker reserviert ist. Wenn Sie Fragen zur Systemkonfiguration haben, werden diese am besten auf einer Plattform wie StackOverflow beantwortet . Danke!
streamlink --https-proxy " http://8xxxx :8000/" --tvplayer-email [email protected] --tvplayer-password vcvdf3 --http-no-ssl-verify https://tvplayer.com/watch /itv am besten --player-no-close --stdout | /var/tmp/youtube/ffmpeg -y -i pipe:0 -vcodec copy -acodec copy -flags -global_header -hls_flags delete_segments -hls_time 10 -hls_list_size 6 /mnt/hls/arc.m3u8
ffmpeg Version 4.0-statisch https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2018 die FFmpeg-Entwickler
gebaut mit gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
Konfiguration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 -- enable-libxml2 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libfreetype --enable-libmp3lame -- enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable -libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg
libavutil 56.14.100 / 56.14.100
libavcodec 58.18.100 / 58.18.100
libavformat 58.12.100 / 58.12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7.16.100 / 7.16.100
libswscale 5.1.100 / 5.1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
[console][info] streamlink läuft als root! Vorsichtig sein!
[console][info] Passendes Plugin tvplayer für URL https://tvplayer.com/watch/itv gefunden
Fehler: Kann nicht öffnen URL: https://live.tvplayer.com/stream.m3u8?id=204&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6XC9cL2xpdmUudHZwbGF5ZXIuY29tXC9zdHJlYW0ubTN1OD9pZD0yMDQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE1MjkwNTc0OTR9LCJJcEFkZHJlc3MiOnsiQVdTOlNvdXJjZUlwIjoiNjIuMjEwLjE0Mi42NlwvMzIifX19XX0_&Signature=mHOteYcUu4QsbGD n0e ~ 7meDUGT8VN7bVOBAHa-0Mk6ROA9XHYx3aIAZMAo3dFjOGuWk-3MszJzRFHdv ~ -CCsmX3D8XQa2zvzfuIWfMAT ~ yDshroXBN25iW6ZJ0-7lGla00jMTUpm5sW-uDy18OkiBWgGvDVas2Lz-EW ~ 5-LTw2YWvEpqkvRB9OpcsHJj9RRQLuDVjwYKXwKvHTJmB1J ~sGE3aigaL7AZyBaIAUMcpk-xYMpDuPV9BsBN9AT397lFfRPFt155u~yeBHZ4JlUN2GIINUBt0-CzGuYVq3dsO kYYEZJo9cQTVhArpo7ek03VbDP5egtCM8obN63AEkA__&Key-Pair-Id=APKAJGWDVCU5SXAPJELQ Fehler: Forbidden (40)
pipe:0 : Beim Verarbeiten der Eingabe wurden ungültige Daten gefunden
Rat bitte n, welcher Proxy-Server für Streamlink geeignet ist, falls vorhanden
Hilfreichster Kommentar
Leider hat dies nichts mit dem von Ihnen identifizierten Problem zu tun und ist ausschließlich auf das beschissene OpenSSL zurückzuführen, mit dem OS X standardmäßig geliefert wird. Version 0.9.8y hat einige echte Probleme mit der Ausführung von SSL-Handshakes, und einige Server tolerieren es nicht gut. Die Verwendung von Python 3 auf meiner OS X-Box (daher die Verwendung eines neueren OpenSSL) zeigt, dass es kein Problem gibt.
Sie haben zwei Möglichkeiten:
env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install PyOpenSSL
ausführen.