<p>request.exceptions.SSLError: EOF terjadi karena melanggar protokol (_ssl.c:645)</p>

Dibuat pada 12 Feb 2016  ·  77Komentar  ·  Sumber: psf/requests

Berikut adalah masalah pertama.
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

Pertama, saya membuat virtualenv dan pip install requests[security]

Lalu aku punya

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

yang saya harapkan.

Semuanya bekerja dengan baik selama sekitar satu jam.

Kemudian, beberapa skrip saya sendiri mogok yang normal. Setelah itu, ketika saya mencoba menjalankan skrip saya lagi, saya mendapatkan pengecualian berikut

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)

Jadi saya membuka konsol Python lain dan

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

Jadi saya mem-boot ulang, mencopot semua lib ini dan pip menginstalnya lagi. Semuanya bekerja lagi.

Tapi setelah 1 jam atau lebih, pengecualian yang sama lagi.

Komentar yang paling membantu

@the-efi Apakah Anda sudah menginstal pyopenssl , pyasn1 , dan ndg-httpsclient ?

Semua 77 komentar

Kemudian, beberapa skrip saya sendiri mogok yang normal.

Seperti apa tabrakan seperti itu?

Setelah itu, ketika saya mencoba menjalankan skrip saya lagi, saya mendapatkan pengecualian berikut

Apakah Anda benar-benar tidak dapat menjalankannya sama sekali setelah itu?

@ sigmavirus24 Ini hanya beberapa bug dalam kode saya sendiri tanpa ada hubungannya dengan jaringan.
Saya tidak yakin apakah ini penyebab sebenarnya atau hanya kebetulan.

Tetapi satu hal yang pasti, setelah beberapa saat, saya benar-benar tidak dapat membuat permintaan ke https://www.telegram.org , yang dapat saya lakukan segera setelah menginstal permintaan.

Sekedar informasi: #2906

Jadi saya ingin menunjukkan bahwa Anda menginstal requests[security] yang berarti kita harus menggunakan pyOpenSSL tetapi stacktrace Anda menunjukkan bahwa kita tidak. Itu menarik.

@ sigmavirus24 Jadi ini ada yang bisa saya lakukan untuk membantu Anda?

Ada ide? @Lukasa

Jadi yang paling penting di sini adalah: mengapa kode Anda berhenti menggunakan PyOpenSSL? Ketika Anda mengalami crash, dapatkah Anda membuka konsol python di lingkungan virtual Anda dan kemudian menjalankan import urllib3.contrib.pyopenssl , untuk melihat apakah itu berfungsi?

Tidak dapat mereproduksinya sekarang. Saya akan menutup ini terlebih dahulu, dan jika saya menemukan masalah lagi, saya akan menempelkan hasilnya dan membukanya kembali.

@Lukasa Saya pikir karena permintaan dikirimkan dengan urllib3 sendiri, saya tidak dapat mengimpor urllib3 sendiri. Dan hasil berikut mengkonfirmasinya.

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)

Maaf, coba impor 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'
>>> 

Saya yakin itu adalah bug pada 3.5 dengan pyOpenSSL yang tidak kami ketahui tentang @lukasa (sehubungan dengan _fileobject tidak ada.

Tidak, saya tahu tentang itu, dan telah mengusulkan perbaikan hulu di urllib3 ketika kami mulai menguji PyOpenSSL. Kenyataannya adalah requests[security] tidak (dan tidak pernah) bekerja pada Python 3. Itu akan diperbaiki dalam versi Permintaan yang akan datang.

Jadi itu tidak memecahkan teka-teki kami: mengapa ini bekerja sebentar dan kemudian berhenti?

komentar tangen berdasarkan laporan asli, ssl.py bawaan python memiliki opsi untuk menekan EOF yang kasar karena ada banyak situs yang akan mematikan koneksi SSL secara tidak bersih. kadang-kadang tidak dapat diandalkan seolah-olah itu masalah waktu atau kebetulan. berikut ini adalah ekstrak dari 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

Memiliki pengecualian yang sama pada Python 2.7.11/OSX saat menumbuk server dengan requests bawah gevent . Mungkinkah ini terkait?

@the-efi bisakah Anda lebih spesifik tentang pengecualian mana yang Anda lihat?

    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 Apakah Anda sudah menginstal pyopenssl , pyasn1 , dan ndg-httpsclient ?

pyopenssl: negatif
pyasn1: pyasn1==0.1.8 (sementara, saya kira)
ndg-httpsklien: negatif

Oke. Anda juga menjalankan Python 2.7, jadi Anda dan pembuat poster tampaknya mengalami masalah yang berbeda.

Apakah Anda tahu jika Anda mengalami masalah selama pengaturan koneksi, atau pada koneksi yang berjalan lama?

Saya akan membayangkan ini selama pengaturan koneksi, tetapi jika requests menggunakan kembali koneksi yang dibuka sebelumnya dengan Connection: keep-alive saya mungkin salah.

Permintaan memang menggunakan kembali koneksi yang dibuka sebelumnya jika memungkinkan, itulah sebabnya saya mengajukan pertanyaan. ;)

Akan sangat berguna jika kami bisa mendapatkan tangkapan paket dari masalah ini dalam kasus Anda, meskipun itu mungkin rumit mengingat itu terjadi di bawah beban berat.

Tidak masalah, saya akan melihat apa yang bisa saya lakukan setelah akhir pekan. Apakah Anda ingin saya mengirimkannya sebagai edisi baru?

Ya silahkan. =)

@Lukasa Ada kemajuan dengan urllib3?

@caizixian Kami sudah sampai di sana, tetapi kami memiliki beberapa masalah dengan pengujian CI kami karena Travis CI memiliki gambar PyPy yang cukup lama yang tidak berperilaku baik dengan PyOpenSSL saat ini. Saya akan melihat apakah saya bisa membuatnya bekerja akhir pekan ini.

@Lukasa @shazow urllib3 selalu memiliki rumah di http://ci.kennethreitz.org , jika diinginkan!

Adakah pembaruan untuk yang satu ini? Ini cukup sering terjadi ketika bekerja dengan aws.

@mindw Sejauh yang saya tahu, kami tidak memiliki pemahaman yang baik tentang di mana dan kapan itu terjadi. Dalam backtrace di atas itu terjadi selama jabat tangan, yang biasanya merupakan masalah dengan negosiasi: kapan Anda mengalami kesalahan ini?

OS X, Python 3.5.1, meminta 2.10.0 + keamanan.
Saya akan mencoba dan memberikan info tambahan atas permintaan :)

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)

Ini sangat menunjukkan kurangnya SNI atau tidak ada tumpang tindih sandi. Bisakah Anda mencetak baris perintah kriptografi di OP dan memberi tahu saya apa yang dikatakannya?

bagaimana saya melakukannya?

@mindw Lihat OP (postingan asli) di mana @caizixian mengimpor backend dari cryptography dan mencetak versi OpenSSL.

Juga mendapatkan masalah ini. Informasi apa yang dapat saya berikan untuk membantu menyelesaikannya?

@LukeNZ Banyak hal. Versi Python, paket yang diinstal, versi permintaan, versi OpenSSL, sistem operasi, dan situs web yang Anda coba hubungi.

Hai, saya baru saja mulai menggunakan Permintaan dan saya juga mendapatkan hal yang sama. Saya menggunakan OS X 10.11.5, Python 3.5.1 dalam virtual env, versi terbaru dari permintaan. Menjalankan versi open_ssl seperti pada OP memberi saya

OpenSSL 1.0.2h 3 Mei 2016

Saya mencoba terhubung ke https://api.marketcircle.net/v1/ .

Sepertinya Permintaan adalah satu-satunya permainan di kota tanpa menulis banyak kode - Unirest tidak lagi menginstal untuk Python 3, jadi nak, saya harap ini segera diketahui..

@eoco Oke, itu menarik. Saya tidak dapat mereproduksi ini di OS X 10.11.6 Beta, Python 3.5.1 dengan Permintaan 2.10.0. Apakah Anda mengalami masalah secara konsisten atau sebentar-sebentar?

Secara konsisten - Saya belum berhasil terhubung.

Traceback saya cukup dekat dengan mindw di atas, akan diposting di bawah sini. Tetapi sama seperti FYI, saya menginstal permintaan untuk Python 2.7 untuk mengujinya juga dan mendapatkan SNIMissingWarning: Meskipun peringatan yang sama mengatakan itu mungkin ada hubungannya dengan itu menjadi versi Python yang lebih lama, tetapi saya tidak yakin apakah itu kasus. Terlepas dari itu, tidak ada koneksi yang beruntung di sana juga.

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.

Saya juga kembali dan menginstal Unirest di Python 2.7 dan mendapatkan kesalahan EOF lain, tetapi kali ini di urllib2:

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

Jadi- ini mungkin tidak ada hubungannya sama sekali dengan Requests.py, tapi sejujurnya, saya tidak tahu harus ke mana dari sini, selain tidak menggunakan Python. Berikut ini traceback dari request/Python 3.5.1:
`
permintaan impor
url = ' https://api.marketcircle.net/v1/ '
r = request.get(url) # tidak menambahkan header otorisasi, hanya memeriksa koneksi

Traceback (panggilan terakhir terakhir):
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", baris 578, di urlopen
terpotong = terpotong)
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", baris 351, di _make_request
self._validate_conn(sambungan)
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", baris 814, di _validate_conn
sambung.koneksi()
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", baris 289, terhubung
ssl_version=resolved_ssl_version)
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", baris 308, di ssl_wrap_socket
kembalikan context.wrap_socket(sock, server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", baris 376, di wrap_socket
_konteks=diri sendiri)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", baris 747, di __init__
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", baris 983, di do_handshake
self._sslobj.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", baris 628, di do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF terjadi karena melanggar protokol (_ssl.c:645)

Selama penanganan pengecualian di atas, pengecualian lain terjadi:

Traceback (panggilan terakhir terakhir):
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", baris 403, di kirim
batas waktu = batas waktu
File "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", baris 604, di urlopen
meningkatkan SSLError(e)
request.packages.urllib3.exceptions.SSLError: EOF terjadi karena melanggar protokol (_ssl.c:645)
`
Jadi, saya minta maaf jika ini tidak membantu. Terima kasih!

Bisakah Anda menjalankan ini dan tunjukkan hasilnya? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Jadi ini hasilnya: (Versi berbeda dari perintah yang dijalankan di OP)

OpenSSL 0.9.8zh 14 Jan 2016

Terima kasih!

@eoco Oke, keren.

Jadi masalahnya di sini adalah Python 3 Anda terhubung dengan sistem OpenSSL, yang sudah kuno. Apa yang ada di lingkungan pip Anda? Bisakah Anda menjalankan python3 -m pip freeze untuk saya?

Tidak terlalu banyak disana..

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

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

Terima kasih telah melampaui dan melampaui ini. Ini jelas bukan masalah dengan Permintaan jadi saya sangat menghargai waktu Anda.

Oke, jadi cara termudah bagi Anda untuk memperbaikinya adalah dengan menjalankan python3 -m pip install pyopenssl pyasn1 ndg-httpsclient . Itu akan memperbaiki masalah Anda, tetapi jika tidak, kami dapat mengejar opsi yang lebih agresif.

Hmm. Masih kesalahan yang sama setelahnya-

python3.5 -m pip membeku

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 . Bisakah Anda menjalankan ini untuk saya? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" dan beri tahu saya apa yang dihasilkannya? Jalankan juga python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

Wah, itu pasti menunjuk ke masalah. Saat pertama kali dijalankan, saya mendapatkan traceback berikut:

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'

Bukankah urllib bagian dari perpustakaan standar? Bagaimanapun, saya pip menginstal urllib dan sekarang saya aktif dan berjalan.

Saya tidak dapat memberi tahu Anda betapa saya menghargai bantuan Anda dengan ini, Anda pergi jauh di atas dan di luar. Saya ingin tahu apakah ada masalah dengan unduhan Python 3.5 untuk Mac di python.org? Ini adalah instalasi yang cukup bersih untuk proyek ini. Bagaimanapun, mungkin ini akan membantu orang lain jika mereka mengalami hal seperti ini.

Lagi, terima kasih banyak!

Ah, ini sepertinya bug permintaan yang tepat. Urllib3 memiliki impor non-relatif dalam basis kodenya yang rusak saat kami menjualnya! Kita harus bertujuan untuk memperbaikinya.

@eoco Jadi saat kami menjalankan perbaikan ini melalui pipa (lihat shazow/urllib3#901), perbaikan termudah Anda adalah menginstal Python 3 menggunakan sesuatu seperti Homebrew. Ini akan menautkan Python 3 Anda dengan OpenSSL yang jauh lebih baru, yang akan menyelesaikan masalah ini untuk Anda baik dalam permintaan maupun aplikasi lain yang menggunakan binding sistem TLS.

Mengerti. Hanya menginstal urllib3 tampaknya telah menyelesaikan masalah saya, tetapi saya mungkin melakukannya. Mohon maaf atas segala kebingungan yang mungkin disebabkan oleh hal ini.

Terima kasih!

Saya menemukan bug yang sama SETELAH beralih ke aws dan meletakkan aplikasi di belakang loadbalancer elastis, tidak pernah terjadi sebelumnya.

Saya telah menginstal urllib3 juga.

Apakah ada harapan untuk menginstal pyopenssl? Saya mencoba dan ada banyak kesalahan tingkat-c (yang mungkin menyebabkan beberapa bagian yang hilang pada gambar buruh pelabuhan saya).

[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 Coba instal pyopenssl, ndg-httpsclient, dan pyasn1. Anda membutuhkan ketiganya saat ini.

Oke, saya akan mencobanya (saya hanya dapat mereproduksinya di aws dan melaporkan kembali).

Bagi mereka yang menjalankan python3 dalam paket ubuntu:latest di buruh pelabuhan, Anda perlu menambahkan

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

sebelum menambahkan

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

... untuk kebutuhan Anda.txt

Punya masalah yang sama di sini.
Diperbaiki dengan menginstal pyopenssl, ndg-httpsclient, pyasn1 dan urllib3 tentunya.

Saya tidak muncul lagi di pihak saya juga.

Saya mencoba terhubung ke API Twitter jadi pada awalnya saya mendapatkan kesalahan di bawah ini
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Saya menggunakan patch monyet dan tetapi patch uang surat tidak berfungsi, saya menginstal pyOpenSSL ,ndg-httpsclient, pyasn1 dan entah bagaimana ini berhasil.
Tapi setelah ini saya mendapatkan ini
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("''",))

dan ini
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')

Saya menggunakan python 2.7 , urllib3(1.4), request(2.9.1).

Kedua kesalahan ini menunjukkan bahwa server jauh tidak menerima permintaan Anda. Namun, tidak mungkin bagi kami untuk mendiagnosis kesalahan itu. Saya sarankan Anda meningkatkan OpenSSL Anda dan coba lagi.

pip install --force-reinstall requests[security] menyelesaikannya untuk saya.

Saya mendapatkan pengecualian yang sama setelah mencoba setiap solusi yang disebutkan di atas. Jejak kesalahan:
File "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", baris 488, dalam permintaan
resp = self.send(persiapan, *send_kwargs)File "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", baris 609, di kirimr = adapter.send(permintaan, * kwargs)
File "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", baris 497, di kirim
naikkan SSLError(e, request=request)
request.exceptions.SSLError: ("jabat tangan buruk: SysCallError(-1, 'EOF tak terduga')",)

Informasi Paket Sistem:
cffi==1.9.1
kriptografi == 1.6
idna==2.1
ndg-httpsklien==0.4.2
pkg-sumber daya==0.0.0
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
permintaan==2.12.3
enam == 1.10.0

Python: Python 3.5.2 (default, 5 Juli 2016, 12:43:10)
OS: Ubuntu 16.04
OpenSSL 1.0.2g 1 Mar 2016

Hargai bantuan Anda dalam hal ini.

Ini hampir pasti berarti cipher yang ditawarkan ke rekan jarak jauh tidak dapat diterima. Jika Anda menggunakan openssl s_client -connect <host>:<port> ke situs web yang Anda coba hubungi, dapatkah Anda memberi tahu saya apa hasilnya? (Pastikan untuk melakukannya dengan OpenSSL 1.0.2g yang Anda gunakan).

@Lukasa Terima kasih atas tanggapan cepat Anda. Output seperti yang Anda minta adalah sebagai berikut:

Saya juga menambahkan tanggapan dari OpenSSL 1.0.1f 6 Jan 2014
Tampaknya berfungsi pada versi ini.

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

Saya juga mencoba dengan versi openssl sebelumnya dan tampaknya berfungsi:

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

Jadi ini sepertinya server Anda memiliki keberatan yang cukup berat terhadap sesuatu di jabat tangan OpenSSL 1.0.2 Anda. Apakah Anda akrab dengan tcpdump atau wireshark? Jika ya, akan sangat membantu jika Anda dapat mengambil paket dari dua jabat tangan dan menyediakannya untuk saya.

Masalah yang sama di sini dengan 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

Saya menggunakan perbaikan (yang berfungsi sebelumnya) yang disarankan di sini .

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
OS: macOS 10.12.2

Kesalahan yang saya dapatkan adalah:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

@rubendibattista www.celestrack.com memiliki konfigurasi TLS yang buruk , seperti yang Anda lihat di sini . Ini berarti bahwa versi modern dari Requests tidak mendukung cipher suite mana pun yang didukung oleh server, karena semuanya lemah dan rusak.

Dalam contoh pertama, saya sarankan untuk tidak menghubungi server ini sama sekali. Jika itu tidak memungkinkan, Anda dapat mengubah cipher suite default dengan melakukan sesuatu seperti ini .

@Lukasa Terima kasih atas dukungan Anda. Saya menghubungi admin situs untuk melaporkan apa yang Anda katakan dan mencoba menemukan solusi yang lebih baik daripada menggunakan solusi yang Anda sarankan.

Halo kawan-kawan! Punya kesalahan ini juga. Menggunakan python3 dan menginstal kombo (pyopenssl ndg-httpsclient pyasn1 urllib3) berhasil. Tapi saya ingin tahu bagaimana python2.7 berperilaku di OS X dan Ubuntu:

Skenario 001

  • ular piton: 2,7
  • permintaan: 2.3.0
  • pyopenssl ndg-httpsklien pyasn1 urllib3: Tidak diinstal
  • virtualenv: 1.11.6
  • OS: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 Jan 2016

Kesalahan

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)

Skenario 002

  • ular piton: 3.4
  • permintaan: 2.12.5
  • pyopenssl ndg-httpsklien pyasn1 urllib3: Tidak diinstal
  • virtualenv: 1.11.6
  • OS: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 Jan 2016

Kesalahan

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)

Skenario 004

  • ular piton: 2,7
  • permintaan: 2.12.5
  • pyopenssl ndg-httpsklien pyasn1 urllib3: Tidak Diinstal
  • OS: Ubuntu 14.4 (Dockerized)
  • OpenSSL: tidak diinstal

Kesalahan hilang

Skenario 003

  • ular piton: 3.4
  • permintaan: 2.12.5
  • pyopenssl ndg-httpsklien pyasn1 urllib3: Terinstal
  • virtualenv: 1.11.6
  • OS: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 Jan 2016

Kesalahan hilang

Kesalahannya tidak jelas, tetapi kemungkinan besar itu adalah hasil dari versi OpenSSL Anda. Klaim Anda bahwa Ubuntu 14.04 tidak memiliki OpenSSL tidak mungkin benar jika Anda membuat permintaan HTTPS. Tebakan terbaik saya adalah bahwa server mengirim EOF karena tidak ada sandi Anda yang dapat diterima. Ubuntu berfungsi karena memiliki OpenSSL yang lebih baru dengan cipher yang lebih baru. Menginstal PyOpenSSL berfungsi karena menyediakan salinan OpenSSL 1.0.2 dari vendor, juga dengan cipher yang lebih baru.

Halo!

Saya memiliki masalah dengan beberapa situs https dan meminta perpustakaan.
Situs: https://ndmc.gov.in/vacancy.aspx

dipasang:
aplikasi == 1.4.0
cffi==1.9.1
kriptografi == 1.7.2
idna==2.2
ndg-httpsklien==0.4.2
kemasan == 16.8
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
pyparsing == 2.1.10
permintaan == 2.13.0
enam == 1.10.0
urllib3==1.20
OpenSSL 1.0.2k 26 Jan 2017

dapatkan kesalahan: request.exceptions.SSLError: ("jabat tangan buruk: SysCallError(-1, 'EOF tak terduga')",)

OS: Archbang linux, terbaru
Python 3.6 & Python 2.7 - kesalahan yang sama

Anda adalah orang lain yang memenangkan kompetisi kami yang dapat mencoba menghubungi server HTTPS terburuk di dunia . Server ini dikonfigurasi dengan sangat buruk , sepenuhnya tidak aman. Alasan Anda mengalami masalah ini adalah karena Permintaan tidak lagi mendukung rangkaian sandi mana pun yang didukung server ini karena semuanya lemah atau tidak aman. Dalam contoh pertama saya sarankan Anda mencoba untuk menekan seseorang untuk memperbaiki server, tetapi jika Anda benar-benar harus menghubunginya, Anda dapat menambahkan kembali 3DES seperti ini .

@vyscond menyelamatkan hidup saya. Tidak peduli apa yang saya lakukan di OSX saya, itu hilang hanya ketika menginstal pyopenssl ndg-httpsclient pyasn1 urllib3 . Mungkin itu harus ditambahkan sebagai dependensi untuk instalasi OSX requests ?

Ini hanya berguna pada beberapa konfigurasi OS X dan Python. Hasil akhirnya adalah mereka tetap opsional.

Saya bertanya-tanya berapa banyak waktu yang dihabiskan orang sebelum mereka (mungkin) menemukan solusi untuk masalah itu. Saya harus melalui banyak hal untuk menemukan utas ini dan melewatinya. Apakah itu layak?

Bergantung. Masalah dapat muncul dengan meminta dependensi ini juga, paling tidak menambahkan OpenSSL baru ke sistem Anda yang diversi dan dikelola secara terpisah.

@Lukasa untuk beberapa alasan saya membuat pengaturan saya berfungsi, sepertinya pyopenssl (diinstal melalui permintaan [keamanan] mengacaukan sertifikat yang dilampirkan pada beberapa permintaan.
Saya harus menghapus paket pyopenssl untuk memaksa permintaan menggunakan OpenSSL di urllib3.
Ini terjadi ketika menggunakan adal ( https://github.com/AzureAD/azure-activedirectory-library-for-python ) yang pada dasarnya tidak berfungsi dengan beberapa permintaan versi lama (yang mendukung sertifikat).
Tampaknya sedikit voodoo bagi saya, meskipun.

Saya mengalami masalah ini pada Mac OSX Sierra v 10.12.0. Mencoba semua yang ada di utas ini, tidak berhasil. Akhirnya memutakhirkan OS saya ke v10.12.6 dan masalahnya hilang.

Kesalahan juga dapat muncul dengan sendirinya saat menggunakan python-requests untuk membuat panggilan api ke situs yang berada di belakang vpn, dan terowongan vpn itu kebetulan sedang down pada saat itu.

Halo kawan-kawan!

Saya sendiri agak baru dalam permintaan dan menemukan kesalahan ini saat melakukan POC dengan Permintaan untuk melihat apakah itu dapat memenuhi persyaratan saya untuk kepatuhan kriteria umum. Saya mencoba menghubungkan POC Permintaan saya ke alat ini , saya secara khusus melihat kasus uji untuk FIA-X509 Ext 1.1 tetapi inilah yang saya dapatkan:

Traceback (panggilan terakhir terakhir):
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 601, di urlopen
terpotong = terpotong)
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 346, di _make_request
self._validate_conn(sambungan)
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 850, di _validate_conn
sambung.koneksi()
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", baris 326, terhubung
ssl_context=konteks)
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", baris 329, di ssl_wrap_socket
kembalikan context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.6/ssl.py", baris 407, di wrap_socket
_context=diri sendiri, _session=sesi)
File "/usr/lib/python3.6/ssl.py", baris 814, di __init__
self.do_handshake()
File "/usr/lib/python3.6/ssl.py", baris 1068, di do_handshake
self._sslobj.do_handshake()
File "/usr/lib/python3.6/ssl.py", baris 689, di do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF terjadi karena melanggar protokol (_ssl.c:777)

Selama penanganan pengecualian di atas, pengecualian lain terjadi:

Traceback (panggilan terakhir terakhir):
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", baris 440, dalam pengiriman
batas waktu = batas waktu
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", baris 639, di urlopen
_stacktrace=sys.exc_info()[2])
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", baris 388, secara bertahap
naikkan MaxRetryError(_pool, url, error atau ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='10.0.0.221', port=443): Percobaan ulang maksimum terlampaui dengan url: / (Disebabkan oleh SSLError(SSLEOFError(8, 'EOF terjadi pelanggaran protokol (_ssl.c:777) )'),))

Selama penanganan pengecualian di atas, pengecualian lain terjadi:

Traceback (panggilan terakhir terakhir):
File "req.py", baris 91, di
r = session.request('GET', 'https://10.0.0.221', verifikasi=True)
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", baris 508, dalam permintaan
resp = self.send(persiapan, *send_kwargs)File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", baris 618, di kirimr = adapter.send(permintaan, * kwargs)
File "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", baris 506, di kirim
naikkan SSLError(e, request=request)
request.exceptions.SSLError: HTTPSConnectionPool(host='10.0.0.221', port=443): Percobaan ulang maksimum terlampaui dengan url: / (Disebabkan oleh SSLError(SSLEOFError(8, 'EOF terjadi karena pelanggaran protokol (_ssl.c:777) )'),))

ini adalah kode POC yang saya gunakan:

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)

di mana 10.0.0.221 adalah tempat saya meletakkan alat untuk verifikasi.

Saya tidak begitu yakin mengapa kesalahan ini terjadi. Saya mencoba menelusuri utas ini serta beberapa pertanyaan lain tentang stackoverflow juga tetapi tidak dapat menemukan solusi yang sesuai.

Saya akan mengakui bahwa saya tidak memiliki pemahaman yang jelas tentang protokol TLS juga pada saat ini. Jadi jika seseorang bisa membimbing saya tentang apa masalahnya di sini, saya akan berterima kasih.

Tolong beri tahu saya jika saya melewatkan sesuatu atau perlu memberikan informasi tambahan apa pun. Terima kasih!

Sama seperti FYI, kesalahan ini juga terjadi saat SSL tidak diaktifkan di server yang Anda sambungkan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jakul picture jakul  ·  3Komentar

eromoe picture eromoe  ·  3Komentar

Matt3o12 picture Matt3o12  ·  3Komentar

avinassh picture avinassh  ·  4Komentar

JimHokanson picture JimHokanson  ·  3Komentar