Я пытаюсь подключиться к почтовому серверу imap, используя только TLSv1 в Python 3.4.Python 3.4 - Подключение к imap-серверу с использованием только TLSv1
После долгого устранения неисправностей (большинство из которых установлено, что почтовый сервер поддерживает только TLSv1), я обнаружил, что я могу подключиться к серверу с помощью OpenSSL:
openssl s_client -connect mail.calpoly.edu:993 -tls1
, а также с пакетом гнезд Python 2.7:
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> import socket
>>>
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> ssl_sock = ssl.wrap_socket(sock=sock, ssl_version=ssl.PROTOCOL_TLSv1)
>>> ssl_sock.connect(('mail.calpoly.edu', 993))
>>> ssl_sock
<ssl.SSLSocket object at 0x7fbab6e7aed8>
Когда я пытаюсь соединить в Python 3.4, однако, я получаю ошибку Рукопожатие:
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> import socket
>>>
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> ssl_sock = ssl.wrap_socket(sock=sock, ssl_version=ssl.PROTOCOL_TLSv1)
>>> ssl_sock.connect(('mail.calpoly.edu', 993))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/ssl.py", line 841, in connect
self._real_connect(addr, False)
File "/usr/lib/python3.4/ssl.py", line 832, in _real_connect
self.do_handshake()
File "/usr/lib/python3.4/ssl.py", line 805, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:598)
Кажется, что Python 3.4 пытается использовать sslv3, хотя я и говорю это не так.
Кто-нибудь знает, почему это происходит и как я могу обойти это?
P.S. - Я буду использовать imaplib в коде, который будет взаимодействовать с сервером. Я использовал сокеты в этом примере, чтобы подчеркнуть, что это не похоже на проблему с пакетом imaplib.
Как вы установили (и построили, если необходимо) свои Python 2.7 и 3.4? Возможно ли, что один был построен с использованием старых библиотек SSL? – abarnert
Оба были установлены через apt-get на Ubuntu 14.04 LTS с OpenSSL версии 1.0.1f. – kavdev