ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)
This appears to occur with some (more recent) versions of Python's
smtplib, ssl (and underlying OpenSSL) with servers that only support
TLSv1. There is no option in Django to force the TLS protocol version that
I can see.
The simplest illustration of failure is with:
import smtplib
s = smtplib.SMTP(host, port) # port typically 587
s.ehlo()
s.starttls() # fails with ssl.SSLEOFError as above
which succeeds (with such servers) with a small modification to force
TLSv1:
import smtplib
import ssl
s = smtplib.SMTP(host, port)
c = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
s.ehlo()
s.starttls(context=c) # works
There is a suggestion of a dependence on exact OpenSSL version in the docs
at https://docs.python.org/3.4/library/ssl.html ("Which connections
succeed will vary depending on the version of OpenSSL...").
Therefore, a proposed framework alternative backend is one that enforces
TLSv1 when required, e.g. as attached. This can be selected with Django's
EMAIL_BACKEND setting, so can be added by users, but I'd have thought that
continuing to support such servers is important for the Django core
project as well.
Test software: Django 1.9.7; Python 3.4.4 (win32) using OpenSSL 1.0.2d
(from ssl.OPENSSL_VERSION). Test server: Microsoft SMTP Server id 8.3.83.0
(from resulting e-mail headers).
--
Ticket URL: <https://code.djangoproject.com/ticket/26759>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* Attachment "smtp_email_backend_tls1.py" added.
New e-mail backend forcing TLSv1
* status: new => closed
* needs_better_patch: => 0
* resolution: => wontfix
* needs_tests: => 0
* needs_docs: => 0
Comment:
This is the first I've heard of the problem, so I can't say myself that
supporting old protocols is critically important for Django core. Feel
free to raise it on the DevelopersMailingList. If there's consensus there
to make a change in Django, we can reopen the ticket.
--
Ticket URL: <https://code.djangoproject.com/ticket/26759#comment:1>