Пользователь не может общаться с прокси - PullRequest
0 голосов
/ 30 апреля 2018

Я использую IMAP-прокси, который безопасно связывается с клиентом. Однако у меня возникает проблема при рукопожатии.

Код моего прокси:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((host, port))
ssock, addr = self.sock.accept()

context = ssl.SSLContext(ssl.PROTOCOL_TLS)
self.conn_client = context.wrap_socket(ssock)

И я получаю ошибку:

ssl.SSLError: [SSL: UNEXPECTED_MESSAGE] unexpected message (_ssl.c:833)

Код моих тестов:

M = imaplib.IMAP4_SSL(IP_PROXY)

И я получаю ошибку:

ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:777)

Однако, когда код прокси-сервера:

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((host, port))
ssock, addr = self.sock.accept()
self.conn_client = ssl.wrap_socket(ssock, certfile=CERT, server_side= True) 

Это правильно работает, но я не хочу использовать сертификат.

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2018

Это правильно работает, но я не хочу использовать сертификат.

SSL / TLS почти везде используется с сертификатом, чтобы убедиться, что клиент общается с ожидаемым сервером, а не с каким-то человеком в середине. Если вы не хотите использовать сертификат, вам нужно либо использовать другой вид аутентификации (например, PSK), либо вообще не использовать аутентификацию («анонимная аутентификация» - очень плохая идея).

В любом случае вам потребуется установить соответствующие шифры, чтобы включить эту альтернативную аутентификацию как на клиенте, так и на сервере. Это можно сделать с помощью атрибута ciphers для wrap_socket на стороне сервера, а в коде вашего клиента это, вероятно, можно сделать, создав SSLContext с необходимыми шифрами и используя аргумент ssl_context для определения конкретного контекста, который будет использоваться. в IMAP4_SSL.

Но это только для вашего конкретного клиента IMAP на основе Python. Не ожидайте, что вы сможете настроить часто используемые клиенты IMAP, такие как Thunderbird или Outlook, для работы с сервером без сертификатов. И, как я уже сказал, это плохая идея.

...