ssl – Python requests.exceptions.SSLError: EOF occurred in violation of protocol
ssl – Python requests.exceptions.SSLError: EOF occurred in violation of protocol
This thing worked for me, just make sure whether these modules are installed or not, if not then install them, following are:
pip install ndg-httpsclient
pip install pyopenssl
pip install pyasn1
It removed my SSLError: EOF occurred in violation of protocol (_ssl.c:590) error.
Hope it helps.
Step 1: Check that Python supports TLS 1.1
You may have a Python setup that only supports TLS 1.0 – not TLS 1.1 or above.
You can check it like this:
Python 3
from urllib.request import urlopen
urlopen(https://www.howsmyssl.com/a/check).read()
Python 2
from urllib2 import urlopen
urlopen(https://www.howsmyssl.com/a/check).read()
(If you get urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>
you may have to disable certificate verification. NOTE: doing this will disable SSL protections against evildoers who would impersonate or intercept traffic to that website – see https://en.wikipedia.org/wiki/Man-in-the-middle_attack
)
import ssl
urlopen(https://www.howsmyssl.com/a/check, context=ssl._create_unverified_context()).read()
Check the output for the key tls_version
. If it says TLS 1.0
and not TLS 1.1
or TLS 1.2
that could be the problem.
If youre using a virtualenv, be sure to run the command inside.
Step 2: Install Python with a newer version of OpenSSL
In order support TLS 1.1 or above, you may need to install a newer version of OpenSSL, and the install Python again afterwards. This should give you a Python that supports TLS 1.1.
The process depends on your operating system – heres a guide for OS X.
virtualenv users
For me, the Python outside of my virtualenv had TLS 1.2 support, so just I removed my old virtualenv, and created a new one with the same packages and then it worked. Easy peasy!
ssl – Python requests.exceptions.SSLError: EOF occurred in violation of protocol
I found it was going through a proxy when it should have connected to the server directly.
I fixed this by doing
unset https_proxy